![实战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=1738859273-5XbpD1U8Sa5xXUeOgVtpMw9J2ey4i7JE-0-6037b2053868ba8d6b5c6c6ac7f0c7f5)
(2)使用代理IP:代理IP的使用方法与请求头的使用方法一致,设置proxies参数即可,代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_1.jpg?sign=1738859273-ghLZI2Twn8FAa87MGR5j8Hyq2AmOJL7c-0-c5fc3090c44083eb4f31ad78fbc92dd4)
(3)证书验证:通常设置关闭验证即可。在请求设置参数verify=False时就能关闭证书的验证,默认情况下是True。如果需要设置证书文件,那么可以设置参数verify值为证书路径。
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_2.jpg?sign=1738859273-YS9eaf08o82Hidh7WSmRPZPBnGygwZI9-0-554d7feeb347f57c06a2fc751ed7780b)
(4)超时设置:发送请求后,由于网络、服务器等因素,请求到获得响应会有一个时间差。如果不想程序等待时间过长或者延长等待时间,可以设定timeout的等待秒数,超过这个时间之后停止等待响应。如果服务器在timeout秒内没有应答,将会引发一个异常。使用代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_3.jpg?sign=1738859273-4YrF4AmLTdNTMyAKg7vVO45lcjvarRhQ-0-1f2750afbb332bc18b4d098a474e3a45)
(5)使用Cookies:在请求过程中使用Cookies也只需设置参数Cookies即可。Cookies的作用是标识用户身份,在Requests中以字典或RequestsCookieJar对象作为参数。获取方式主要是从浏览器读取和程序运行所产生。下面的例子进一步讲解如何使用Cookies,代码如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P61_4.jpg?sign=1738859273-jMCbH6Duq3BOXeetZU9km5tH3J7zJlMN-0-8caf664f99f64291912e0a7deefdbd9c)
代码中变量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=1738859273-muayR0SMbnKd1IEQdURn6RiODg3EBsXa-0-f6eaeb82edc8aa2b9a39158abaac49d5)
如果要将Cookies写入文件,可使用http模块实现Cookies的读写。除此之外,还可以将Cookies以字典形式写入文件,此方法相比http模块读写Cookies更为简单,但安全性相对较低。使用方法如下:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P62_2.jpg?sign=1738859273-ZvvlvF5QK27IExdGEsBzle0dO38stEwV-0-eaec810ce70f21529296bd6dfc6645a4)