Python 爬虫:Header 的设置_爬虫headers怎么写

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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值