一、Header 的设置

在编写爬虫的过程中,有些网站会设置反爬机制,对不是来源于浏览器的访问进行拒绝,此时我们会收到 403 错误响应码,或者收到“抱歉,无法访问“等字眼,这就需要在爬虫程序中修改请求的 headers 伪装浏览器访问,从而绕开网站的反爬机制获取正确的页面。

requests 发送的请求所带的请求头中 User-Agent 会标识为 python 程序发送的请求,如下所示:

import requests

url = '<https://httpbin.org/headers>'

response = requests.get(url)

if response.status_code == 200:
    print(response.text)

在上面的代码中,倒数第二行是对服务器返回的状态代码进行判断。这里的200就是请求成功的反馈。所有的状态代码的取值一般在 100-599 之间,超出这个范围的响应状态码就不是标准的状态响应码了。所有的状态码可以分成 5类:

v2-ec94e6b7a646bc1d5e59f11d6f46e2f7_1440w.jpg

注:https://httpbin.org是一个开源的,用于测试网页请求的网站,比如上面的/headers的链接,将会返回所发送请求的请求头。详情请参考其官网。

User-Agent:用户代理(英语:User Agent)指的是代表用户行为的软件代理程序所提供的对自己的一个标识符。用于标识浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。详情见维基百科词条:User agent

如上图所示,如果我们直接用 request 包,上来就调用 get 或者 post 方法就是干,对方的服务器会根据我们发送的**“"User-Agent": "python-requests/2.25.1"”**了解到,你是用 python 调用的 request 包来访问他们的服务器的。

由于这种行为仅仅是消耗服务器资源带来成本,但是不会给对方带来任何好处(搜索引擎的爬虫除外),所以有一些网站会加入反爬机制,通过识别 headers 来拒绝对你的请求进行响应。

因此,我们需要在发送的请求中加入自定义的 headers,将我们的请求伪装成利用浏览器进行的请求。

requests.get() 的语法是:requests.get(url,kwargs)

其中,url 是我们想要访问的链接,kwargs 是可选参数,包括params、data、json、headers、cookies、auth、files、timeout、proxies、stream、verify、cert等。常用的参数有data、headers。

import requests

url = '<https://httpbin.org/headers>'

headers= {
    "Accept": "image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*", 
    "Accept-Encoding": "gzip, deflate", 
    "Accept-Language": "zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; wbx 1.0.0; wbxapp 1.0.0; Zoom 3.6.0)", 
    "X-Amzn-Trace-Id": "Root=1-628b672d-4d6de7f34d15a77960784504"}

response = requests.get(url,headers=headers)

if response.status_code == 200:
    print(response.text) 

二、查看浏览器 headers 的常用方法