Python 爬虫:Header 的设置

文章介绍了在Python使用requests库进行网络请求时,如何遇到网站的反爬机制并如何通过修改headers,特别是User-Agent字段,来伪装成浏览器访问以避免403错误。同时,解释了HTTP状态码的意义,以及提供了查看和理解headers信息的常见方法。
摘要由CSDN通过智能技术生成

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

一、了解 requests 中 get 与 post 的 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类:

  • 100–199:信息反馈(Informational responses);
  • 200–299:成功反馈(Successful responses),上面的代码的 200 status code就属于这里;
  • 300–399:重定向消息(Redirection messages);
  • 400–499:客户端错误响应(Client error responses),这个区间包含了我们常见的 403 和 404 错误响应码
  • 500–599:服务器错误响应(Server error responses)

返回结果:

img

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

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

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

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

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

那么,浏览器在访问网站时的 headers 是什么样的呢?我们以 IE 浏览器为例,用 IE浏览器打开 [https://httpbin.org/headers]网站,将会收到网站返回的下面 json 文件,这就是 IE浏览器的 headers。

img

将上面的请求头复制下来,传给 requests.get() 函数,即可将请求伪装成浏览器。

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) 

返回的结果变成:

img

上图所示,虽然我们用 Python 发送的 get 请求,但是对方服务器已经认为我们是用浏览器进行访问,这一点依旧是通过上图中的 User-Agent 这个参数进行判断。

此外,我们在应用爬虫的时候,可以随机更换其他 User-Agent 避免触发反爬。

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

上面说到的查看 headers 的方法不很常用,仅仅是用于教学作用。下面介绍两种更加常用的方法。

方法一:这种方法最为常用

在Chrome浏览器的网页上:右键 ——> 检查 ——> Network ——> Doc ——> 在 Name 里找到对应的请求文件 ——> 在右边选择 Headers 标签页,找到“Request Headers”,就可以看到我们发送给服务器的 headers。

img

同理,服务器在发给我们信息的时候,也会发送 Headers。我们同样在上面的选择路径,可以看到“Response Headers”。

img

例如上图中,我们可以查看到服务器响应返回的头信息知道响应结果的编码是utf-8,有的还可以看到服务器所用是apache或是其他web服务器。

方法二:这种方法最方便,我最喜欢

当我们需要的 headers 不止 user-agent,甚至还需要 cookies 的时候,需要手动生成的东西就比较多了。那么,有没有快速一键生成 Python 爬虫请求头的方法呢?答案是借助[https://curlconverter.com/]这个网站。具体过程如下:

1,在Chrome浏览器的网页上:右键 ——> 检查 ——> Network ——> Doc ——> 在 Name 里找到对应的请求文件

2,右键该文件,copy ——> copy as cURL (bash),注意不是【copy as cURL (cmd)】

img

3,打开网站,[https://curl.trillworks.com/],粘贴 cURL (bash) 到左边 curl command,右边会自动出 Python 代码

img

方法三:对于 Chrome 浏览器

也可以在地址栏输入

about:version

此时我们会看到自己的 user agent。

headers中有很多内容,主要常用的就是user-agent 和 host,他们是以键对的形式展现出来,如果user-agent 以字典键对形式作为headers的内容,就可以反爬成功,就不需要其他键对;否则,需要加入headers下的更多键对形式。

三、Headers 的解读

(一)User-Agent 的格式解读

User-Agent通常格式:

第一部分:Mozilla/5.0
历史原因,User-Agent里默认带有Mozilla字样。

第二部分:平台信息
Windows NT 6.1是指我使用的操作系统的版本,win7对应的就是Windows NT 6.1。
Win64; x64是指操作系统是64位的

Windows系统下:

Windows NT 5.0 //  Windows 2000 
Windows NT 5.1 //  Windows XP
Windows NT 6.0 //  Windows Vista 
Windows NT 6.1 //  Windows 7
Windows NT 6.2 //  Windows 8
Windows NT 6.3 //  Windows 8.1
Windows NT 10.0 //  Windows 10
Win64; x64 // Win64 on x64
WOW64 // Win32 on x64

Linux系统下:

X11; Linux i686; // Linux,i686 版本
X11; Linux x86_64; // Linux,x86_64 版本
X11; Linux i686 on x86_64 // Linux, x86_64 的 i686 版本

macOS系统下:

Macintosh; Intel Mac OS X 10_9_0 // Intel x86 或者 x86_64
Macintosh; PPC Mac OS X 10_9_0 // PowerPC
Macintosh; Intel Mac OS X 10.12; // 不用下划线,用点

第三部分:引擎版本
通常默认为 AppleWebKit/537.36 (KHTML, like Gecko) …Safari/537.36

第四部分:浏览器版本
这里使用的浏览器版本为:Edg/80.0.361.54

(二)Cookie

主要用来保存用户信息的,例如用户名、密码等。

(三)Host

请求的服务器主机。

(四)Referrer

当前页面的上一个页面,也就是在浏览器的左上角点击“后退”时会跳转到的页面。

img

参考文献

点此查看:Python爬虫:requests的headers该怎么填
点此查看:Python 爬虫:requests 和 selenium 伪装 headers 和代理应对反爬机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值