实战Python网络爬虫
上QQ阅读APP看书,第一时间看更新

6.4 下载与上传

下载文件主要从服务器获取文件内容,然后将内容保存到本地。下载文件的方法如下:

代码变量url是一个图片文件URL地址,对文件所在URL地址发送请求(大多数是GET请求方式);服务器将文件内容作为响应内容,然后将得到的内容以字节流(Bytes)格式写入自定义文件,这样就能实现文件下载。

除了文件下载外,还有更为复杂的文件上传,文件上传是将本地文件以字节流的方式上传到服务器,再由服务器接收上传内容,并做出相应的响应。文件上传存在一定的难度,其难点在于服务器接收规则不同,不同的网站接收的数据格式和数据内容会不一致。下面以发送图片微博为例进行介绍。

(1)在浏览器中输入https://weibo.cn/,在网页上单击“高级”按钮并使用Fiddler抓包工具(由于发送微博时,网页发生302跳转,因此使用Chrome会清空请求信息,导致抓取难度较大)。

(2)单击“选择文件”,选择图片文件并输入发布内容“Python爬虫”,最后单击“发布”按钮发布微博。查看Fiddler抓取的请求信息,如图6-2所示。

图6-2 Fiddler抓取的请求信息

从图6-2得知,该请求方式是POST, QueryString是POST的请求参数data, Content-type是上传文件,三个Content-Disposition分别对应发布内容、发布图片和设置分组可见。代码实现如下:

POST数据对象是以文件为主的,上传文件时使用files参数作为请求参数。Requests对提交的数据和文件所使用的请求参数做了明确的规定。

参数files也是以字典形式传递的,每个Content-Disposition为字典的键值对,Content-Disposition的name为字典的键,value为字典的值。

此外,不同的网站设置对files参数的设置也是不一样的,下面列出较为常见的上传方法: