通过python调用java服务的接口,将pdf文件放到MinIO服务器中, 遇到boundary=<calculated when request is sent>动态设置的问题

公司的背景需求是:先爬取GB网站再爬取粮食网站,用GB网站的基本信息调用粮食网站的搜索功能,实现搜索查询。

为什么是搜索查询?

粮食网站展示的数据是假数据,很多数据没有展示,但搜索特定信息是能搜到的。

爬取GB网站:基本信息

有反爬机制,难点:

  1. 点击界面内容,其url不会改变

    解决:使用webdriver模拟浏览器事件进行爬取。

  2. 有验证码,且验证码是一个覆盖在下载页面的页面,不能右键,不能跳过

    解决:使用PIL 进行网页部分截图,截取验证码后使用ddddocr实现验证码识别

有个问题是不能查看页面源码,使用断点查看请求下来的代码保存到本地,或使用ctrl+s将网页保存为mhtml文件。之后可以进行源代码的查看。

使用XPATH进行定位,XPATH直接在chroom浏览器右键提取

之后爬取食品网站:

并将爬取到的pdf通过python调用java服务的接口,将pdf文件放到MinIO服务器中。

python发送post请求到Java程序,编写MinIO操作类。

难点:发送POST请求携带文件时,需要设置请求头multipart/form-data; boundary=<calculated when request is sent>

设置之后发现boundary是动态生成的,如果写死会导致覆盖了原来的请求头,传的文件参数无效。

解决:使用MultipartEncoder构建 multipart/form-data 请求体,并将文件作为data参数传入

#发送post请求到后台上传文件
def post_file(url, response):
    multipart_data = MultipartEncoder(fields={'file': ('filename', response.content, 'application/pdf')})
    headers = {'Content-Type': multipart_data.content_type}
    result = requests.post(url, data=multipart_data, headers=headers)
    return result

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
```java import io.minio.MinioClient; import io.minio.errors.MinioException; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; public class MinioTransfer { public static void main(String[] args) { String oldEndpoint = "http://old-minio-server:9000"; String oldAccessKey = "OLD_ACCESS_KEY"; String oldSecretKey = "OLD_SECRET_KEY"; String oldBucketName = "old-bucket"; String newEndpoint = "http://new-minio-server:9000"; String newAccessKey = "NEW_ACCESS_KEY"; String newSecretKey = "NEW_SECRET_KEY"; String newBucketName = "new-bucket"; try { // 创建旧MinIO客户端 MinioClient oldClient = new MinioClient(oldEndpoint, oldAccessKey, oldSecretKey); // 创建新MinIO客户端 MinioClient newClient = new MinioClient(newEndpoint, newAccessKey, newSecretKey); // 获取旧MinIO服务器上的所有对象 Iterable<io.minio.Result<io.minio.messages.Item>> objects = oldClient.listObjects(oldBucketName); // 遍历并复制每个对象到新的MinIO服务器 for (io.minio.Result<io.minio.messages.Item> result : objects) { io.minio.messages.Item item = result.get(); String objectName = item.objectName(); // 复制对象 newClient.copyObject(oldBucketName, objectName, newBucketName, objectName); System.out.println("Copied object: " + objectName); } System.out.println("Transfer completed successfully."); } catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) { System.out.println("Error occurred: " + e.getMessage()); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值