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

2.2 请求头

请求头描述客户端向服务器发送请求时使用的协议类型、所使用的编码以及发送内容的长度等。客户端(浏览器)通过输入URL后确定等于做了一次向服务器的请求动作,在这个请求里面带有请求参数,请求头在网络爬虫中的作用是相当重要的一部分。检测请求头是常见的反爬虫策略,因为服务器会对请求头做一次检测来判断这次请求是人为的还是非人为的。为了形成一个良好的代码编写规范,无论网站是否做Headers反爬虫机制,最好每次发送请求都添加请求头。

请求头的参数如下。

(1)Accept:text/html,image/*(浏览器可以接收的文件类型)。

(2)Accept-Charset:ISO-8859-1(浏览器可以接收的编码类型)。

(3)Accept-Encoding:gzip,compress(浏览器可以接收的压缩编码类型)。

(4)Accept-Language:en-us,zh-cn(浏览器可以接收的语言和国家类型)。

(5)Host:请求的主机地址和端口。

(6)If-Modified-Since:Tue, 11 Jul 2000 18:23:51 GMT(某个页面的缓存时间)。

(7)Referer:请求来自于哪个页面的URL。

(8)User-Agent:Mozilla/4.0(compatible, MSIE 5.5,Windows NT 5.0,浏览器相关信息)。

(9)Cookie:浏览器暂存服务器发送的信息。

(10)Connection:close(1.0)/Keep-Alive(1.1)(HTTP请求版本的特点)。

(11)Date:Tue, 11 Jul 2000 18:23:51 GMT(请求网站的时间)。

一个标准的请求基本上都带有以上属性。在网络爬虫中,请求头一定要有User-Agent,其他的属性可以根据实际需求添加,因为反爬虫通常检测请求头的Referer和User-Agent,而Cookie不能添加到请求头。除此之外,还有一些比较特殊的请求头信息,如Upgrade-Insecure-Requests(告诉服务器,浏览器可以处理HTTPS协议)、X-Requested-With(判断是否Ajax请求)等。

以下是Python里面一个完整的请求头,以字典格式生成,代码如下: