![实战Python网络爬虫](https://wfqqreader-1252317822.image.myqcloud.com/cover/862/26542862/b_26542862.jpg)
6.3 复杂的请求方式
从第5章得知,复杂的请求方式通常有请求头、代理IP、证书验证和Cookies等功能。Requests将这一系列复杂的请求做了简化,将这些功能在发送请求中以参数的形式传递并作用到请求中。
(1)添加请求头:请求头以字典的形式生成,然后发送请求中设置的headers参数,指向已定义的请求头,代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P60_2.jpg?sign=1739219304-VicxK7Hb4LbRsAiMbrvGoFUAlWisP0b6-0-cb9d8542fc3ef218d39af831c9cdf53b)
(2)使用代理IP:代理IP的使用方法与请求头的使用方法一致,设置proxies参数即可,代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_1.jpg?sign=1739219304-tqEWoPVyML3ZYT2QFF7OKgDPITgXKZwP-0-5c8616e5cc6c292a89c266cd39eeb0d5)
(3)证书验证:通常设置关闭验证即可。在请求设置参数verify=False时就能关闭证书的验证,默认情况下是True。如果需要设置证书文件,那么可以设置参数verify值为证书路径。
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_2.jpg?sign=1739219304-X5zButv1dxYldTV9jX7pLj1subLeQ41g-0-b21fad28fa3628d891c25d989a8bb303)
(4)超时设置:发送请求后,由于网络、服务器等因素,请求到获得响应会有一个时间差。如果不想程序等待时间过长或者延长等待时间,可以设定timeout的等待秒数,超过这个时间之后停止等待响应。如果服务器在timeout秒内没有应答,将会引发一个异常。使用代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_3.jpg?sign=1739219304-YaygAqR6wtbIw2Bl7hl2nYkcNm4tp0xo-0-93a2dc3ac97dc49ec49a969aa6be21d4)
(5)使用Cookies:在请求过程中使用Cookies也只需设置参数Cookies即可。Cookies的作用是标识用户身份,在Requests中以字典或RequestsCookieJar对象作为参数。获取方式主要是从浏览器读取和程序运行所产生。下面的例子进一步讲解如何使用Cookies,代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_4.jpg?sign=1739219304-wgvPj45Y5GEq7hgdVRZt2kh8LIm6Z6wv-0-4b8d0968751d57440968125378bf2bf6)
代码中变量temp_cookies是Cookies信息,可以在Chrome开发者工具→Network→某请求的Headers→Request Headers中找到Cookie所对应的值。然后将字符串转换成字典格式,转换规则主要执行两次分割:第一次以“;”分割,得到列表A,第二次是列表A的每一个元素以“=”分割,得到字典的键值对。
当程序发送请求时(不设参数cookies),会自动生成一个RequestsCookieJar对象,该对象用于存放Cookies信息。Requests提供RequestsCookieJar对象和字典对象的相互转换,代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_5.jpg?sign=1739219304-2rfUEii2x0gEmXeBHirebGt2th934Aq6-0-f7c9cceb0e183f47ba043f9c17316e83)
如果要将Cookies写入文件,可使用http模块实现Cookies的读写。除此之外,还可以将Cookies以字典形式写入文件,此方法相比http模块读写Cookies更为简单,但安全性相对较低。使用方法如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P62_2.jpg?sign=1739219304-2jk8V2c1ZVrt8OUBzkAQTIMInjYlAViO-0-62dcd23ef062e7cb08f973419d9d15a9)