request()方法提供了两种比较常用的文件上传方式,一种是通过fields参数以元组形式分别指定“文件名”、文件内容以及文件类型,这种方式适合上传文本文件时使用。以上传图4.7所示的文本文件为例,代码如下:
图1需要上传的文本文件
上传文本文件:
01 import urllib3 # 导入urllib3模块
02 import json # 导入json模块
03 with open('test.txt') as f: # 打开文本文件
04 data = f.read() # 读取文件
05 http = urllib3.PoolManager() # 创建连接池管理对象
06 # 发送网络请求
07 r = http.request( 'POST','http://httpbin.org/post',fields={'filefield': ('example.txt', data),})
08 files = json.loads(r.data.decode('utf-8'))['files'] # 获取上传文件内容
09 print(files) # 打印上传文本信息
程序运行结果如下:
{'filefield': '在学习中寻找快乐!'}
上传图片文件:
如果需要上传图片则可以使用第二种方式,在request()方法中指定body参数,该参数所对应的值为图片的二进制数据,然后还需要使用headers参数为其指定文件类型。示例代码如下:
01 import urllib3 # 导入urllib3模块
02 with open('python.jpg','rb') as f: # 打开图片文件
03 data = f.read() # 读取文件
04 http = urllib3.PoolManager() # 创建连接池管理对象
05 # 发送请求
06 r = http.request('POST','http://httpbin.org/post',body = data,headers={'Content-Type':'image/jpeg'})
07 print(r.data.decode()) # 打印返回结果
程序运行结果,如图4.8所示。
图2 上传图片文件所返回的信息
说明:由于返回的数据中data内容较多,所以图2中仅截取了数据中的一部分内容。
今天的技能你get√了吗?想学习更多关于网络爬虫的硬核技能,推荐大家学习《Python网路爬虫从入门到实践》:全彩印刷,书中全面细致的讲解了关于Python网络爬虫开发所需的基础知识及核心技术,通过知识讲解→快速示例→综合应用→实战项目,四位一体的方式进行讲解,循序渐进,由浅入深,让大家快速达到理解和应用的目的,同时还设有技术交流群,图书作者和技术老师会在统一时间在线答疑哦~
全彩印刷,每满100减50,店铺首页领券更划算哦~
点我购买:《Python网络爬虫从入门到实践》
End
目前100000+人已关注加入我们
点击阅读原文
进入明日科技京东自营店↓↓↓