- 实战Python网络爬虫
- 黄永祥
- 714字
- 2021-03-23 20:15:52
6.3 复杂的请求方式
从第5章得知,复杂的请求方式通常有请求头、代理IP、证书验证和Cookies等功能。Requests将这一系列复杂的请求做了简化,将这些功能在发送请求中以参数的形式传递并作用到请求中。
(1)添加请求头:请求头以字典的形式生成,然后发送请求中设置的headers参数,指向已定义的请求头,代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P60_2.jpg?sign=1739690245-OBfWopyF8TmlAWjZlD2W8qhlcCksWlL2-0-688d72642b1b59fabf7b3f5eaba974a3)
(2)使用代理IP:代理IP的使用方法与请求头的使用方法一致,设置proxies参数即可,代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_1.jpg?sign=1739690245-syClG6j4eDIEWYD3LNiYr8jKJppzrtJ2-0-7ce51cbc88087d93b1de5b8969016b56)
(3)证书验证:通常设置关闭验证即可。在请求设置参数verify=False时就能关闭证书的验证,默认情况下是True。如果需要设置证书文件,那么可以设置参数verify值为证书路径。
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_2.jpg?sign=1739690245-CEFP4oKUsxYKptv4ykyua1YwHtWRoKaf-0-220e42266996a374681b1fbec909cb1b)
(4)超时设置:发送请求后,由于网络、服务器等因素,请求到获得响应会有一个时间差。如果不想程序等待时间过长或者延长等待时间,可以设定timeout的等待秒数,超过这个时间之后停止等待响应。如果服务器在timeout秒内没有应答,将会引发一个异常。使用代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_3.jpg?sign=1739690245-rFfk0BUUGhNxXfVHwjHcTBxdar0gux99-0-ceb809686312c2b3c7562d6518ac91fd)
(5)使用Cookies:在请求过程中使用Cookies也只需设置参数Cookies即可。Cookies的作用是标识用户身份,在Requests中以字典或RequestsCookieJar对象作为参数。获取方式主要是从浏览器读取和程序运行所产生。下面的例子进一步讲解如何使用Cookies,代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_4.jpg?sign=1739690245-7P1uKJLrb3qU5EP1JoR5r4Hn6RtD3K5l-0-6634b912c41cb6b0efd6bad420595039)
代码中变量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=1739690245-R2BmfGQsJ7C9eRPxEi4f8e0pzacumEDm-0-de4baf079f91ed8ba24dc642c2d98633)
如果要将Cookies写入文件,可使用http模块实现Cookies的读写。除此之外,还可以将Cookies以字典形式写入文件,此方法相比http模块读写Cookies更为简单,但安全性相对较低。使用方法如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P62_2.jpg?sign=1739690245-E6kGPrVaorpQE9B5A9v7cV3FkoyHcKJk-0-204e0ca0f734c8d259d543332a580f48)