以下是常见头部反爬技巧与验证方式的大纲:
User-Agent
字段的伪装方式,Referer
字段的伪装方式,Cookie
字段的伪装方式。
文章目录
- 1. ⛳️ 头部反爬技巧
- 1.1. User-Agent 字段&User-Agent 的作用
- 1.2. 常见 `User-Agent` 的特征
- 1.3. User-Agent 字段的伪装方式
- 2. ⛳️ Referer 字段
- 2.1. Referer 的作用
- 2.2. Referer 的特征
- 2.3. Referer 字段的伪装方式
- 3. ⛳️ Cookie 字段
- 3.1. Cookie 的作用
- 3.2. Cookie 的特征
- 3.3. Cookie 字段的伪装方式
1. ⛳️ 头部反爬技巧
1.1. User-Agent 字段&User-Agent 的作用
User-Agent
字段是 HTTP 协议中的一个请求头部,通常用于标识客户端发送请求的应用程序、操作系统、设备类型、版本等信息。服务器可以根据 User-Agent
字段来判断请求是否来自合法的客户端,做出相应的响应,比如返回不同的网页内容、进行流量控制等。
下面是一些 User-Agent
字段的例子,重点对比其差异。
- Chrome 浏览器的 User-Agent 字段:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
- Firefox 浏览器的 User-Agent 字段:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0
- Safari 浏览器的 User-Agent 字段:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15
- 微信小程序的 User-Agent 字段:
Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Mobile/16A366 MicroMessenger/7.0.10(0x17000a22) NetType/WIFI Language/zh_CN
- Python 爬虫的 User-Agent 字段:
Python-urllib/3.8
1.2. 常见 User-Agent
的特征
常见 User-Agent
的特征包括以下几点:
-
操作系统信息:
User-Agent
字段通常会包含操作系统的信息,比如 Windows、MacOS、Linux 等,不同的操作系统使用的浏览器可能不同,因此对于一些网站来说,操作系统的信息也可以作为反爬手段之一。 -
浏览器信息:
User-Agent
字段还会包含浏览器的信息,比如 Chrome、Firefox、Safari 等。不同的浏览器在渲染网页时可能会有一些差别,因此一些网站会根据浏览器信息来判断是否是爬虫。 -
设备信息:
User-Agent
字段有时也会包含设备信息,比如 iPhone、iPad 等。不同设备使用的浏览器也可能不同,因此设备信息也可以作为反爬手段之一。 -
自定义
User-Agent
:有些爬虫工具允许用户自定义User-Agent
字段,因此一些网站也会根据这些自定义User-Agent
来判断是否是爬虫。
1.3. User-Agent 字段的伪装方式
在 Python 中伪装 User-Agent
字段,可以使用第三方库 fake-useragent
,它可以随机生成不同浏览器的 User-Agent
。
使用 pip 命令安装 fake-useragent
库:
pip install fake-useragent
使用以下代码生成随机的 User-Agent
:
from fake_useragent import UserAgent
ua = UserAgent()
print(ua.random)
这样就能每次生成一个不同的随机 User-Agent
了。另外,fake-useragent
还支持指定不同浏览器的 User-Agent
,例如:
from fake_useragent import UserAgent
ua = UserAgent()
print(ua.chrome) # 生成Chrome浏览器的User-Agent
print(ua.safari) # 生成Safari浏览器的User-Agent
print(ua.ie) # 生成IE浏览器的User-Agent
2. ⛳️ Referer 字段
2.1. Referer 的作用
Referer 是 HTTP 请求头中的一个字段,用来表示当前请求是从哪个页面跳转过来的。
通常在请求图片、视频、音频等静态资源时,浏览器会自动添加 Referer 字段,用来告诉服务器当前资源是从哪个页面发起请求的,服务器就可以根据这个信息做一些统计、记录或者安全控制等操作。
Referer 字段的作用主要有以下几点:
- 防盗链:有些网站可能会设置一些图片或者视频等静态资源,只有在自己的网站上才能正常显示,如果从其他网站上直接访问,就会被拒绝访问。此时可以通过 Referer 字段来判断是否是从自己网站上来的请求,如果不是就拒绝访问。
- 流量统计:通过 Referer 字段可以统计来访者是从哪个页面过来的,从而了解不同页面的流量情况,对网站进行优化。
- 安全控制:有些网站可能会针对特定的 Referer 来源做一些安全控制,如防止 CSRF 攻击等。
2.2. Referer 的特征
Referer 是 HTTP 请求头的一部分,它记录了当前请求的来源页面,即发送请求的页面 URL。具体来说,当用户从一个页面 A 点击链接跳转到另一个页面 B 时,页面 B 的请求头中的 Referer 字段会记录页面 A 的 URL。
Referer 的特征主要包括:
-
Referer 字段中记录的 URL 是前一次请求的 URL。因此,如果请求头中没有 Referer 字段,或者 Referer 字段中的 URL 与当前请求的 URL 不符,则可能被认为是异常请求,从而被服务器屏蔽或拒绝。
-
Referer 字段可以用于防盗链,即通过判断 Referer 字段来判断是否是从合法的网站访问资源。比如,某个网站的图片资源只允许从该网站访问,而不允许其他网站直接链接该资源。这时,服务器可以通过判断 Referer 字段来防止其他网站直接链接该资源。
-
Referer 字段可能会泄漏用户的隐私信息,因为它可以记录用户的浏览历史。为了保护用户的隐私,一些浏览器可能会限制 Referer 字段的发送,或者发送空的 Referer 字段。
2.3. Referer 字段的伪装方式
要伪装 Referer 字段,可以通过构造请求头部实现。下面是用 Python 实现的示例代码:
import requests
url = 'https://pachong.vip'
referer = 'https://www.referer.com'
headers = {
'Referer': referer,
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
response = requests.get(url, headers=headers)
在请求头中添加 Referer 字段,值为想要伪装成的来源页面的 URL。以上代码中,将 Referer 设置为 https://www.referer.com。
如果设置的 Referer 不符合实际情况,有可能会被网站识别为爬虫,导致请求被拒绝。因此,在进行爬虫时,应该根据具体情况,合理设置 Referer 字段。
3. ⛳️ Cookie 字段
3.1. Cookie 的作用
Cookie 是 Web 服务器发送给 Web 浏览器的小型文本文件,用于存储用户在浏览器中的状态信息。它可以使网站记住用户的登录状态、购物车内容、浏览历史等。
当用户访问一个网站时,Web 服务器会在 HTTP 响应头中添加 Set-Cookie 头信息,浏览器接收到响应后,会将 Cookie 保存在本地。当用户再次访问该网站时,浏览器会将保存的 Cookie 信息发送给 Web 服务器,服务器根据 Cookie 中的信息来进行相应的处理,比如保持用户登录状态等。
Cookie 的作用可以简单总结为三点:
- 记录用户的状态信息,如登录状态、购物车内容、浏览历史等;
- 使用户在访问同一个网站时能够保持同一个状态,比如不需要重复登录;
- 用于跟踪用户行为,帮助网站分析用户兴趣、推荐相关内容。
3.2. Cookie 的特征
-
存储在客户端:Cookie 是存储在客户端浏览器中的文本文件,可以通过浏览器进行查看和修改。
-
用于状态管理:Cookie 主要用于状态管理,例如网站登录状态的保存,购物车中的商品信息的保存等。
-
可以设置过期时间:可以在创建 Cookie 时设置过期时间,使得浏览器可以在过期时间之前将其删除。
-
每个域名单独存储:每个域名在客户端上都有一个单独的 Cookie 存储空间,不同域名之间的 Cookie 互不干扰。
-
大小限制:Cookie 存储的数据量有大小限制,通常为 4KB 左右。
-
不安全性:Cookie 存储的数据都是明文的,可能会被恶意篡改或者窃取。因此,敏感信息不应该存储在 Cookie 中。
-
可以禁用:浏览器允许用户手动禁用 Cookie,因此不能完全依赖 Cookie 进行状态管理。
3.3. Cookie 字段的伪装方式
- 手动设置 Cookie:可以在请求头中手动设置 Cookie 字段,模拟浏览器发送的请求。具体实现方式为,在构建 HTTP 请求时,添加请求头中的 Cookie 字段并填入具体的 Cookie 值。
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Cookie': 'name=value'
}
response = requests.get(url, headers=headers)
- 使用第三方库:可以使用第三方库进行 Cookie 伪装。例如,使用 fake_useragent 库伪装 User-Agent 和 http.cookiejar 库伪装 Cookie。
import requests
from fake_useragent import UserAgent
import http.cookiejar as cookielib
# 构建cookiejar对象
cookie_jar = cookielib.CookieJar()
# 构建opener
opener = requests.build_opener(requests.HTTPCookieProcessor(cookie_jar))
# 构建headers
headers = {'User-Agent': UserAgent().random}
# 发送请求
response = opener.open(url, headers=headers)
- 使用 Selenium 模拟浏览器:使用 Selenium 可以直接在浏览器中登录网站获取 Cookie,然后使用获取到的 Cookie 来发送请求。
from selenium import webdriver
# 构建浏览器对象
browser = webdriver.Chrome()
# 打开网站并登录
browser.get(url)
# ...
# 获取Cookie
cookies = browser.get_cookies()
# 构建cookie字符串
cookie_str = ''
for cookie in cookies:
cookie_str += cookie['name'] + '=' + cookie['value'] + ';'
# 构建请求头
headers = {'Cookie': cookie_str}
# 发送请求
response = requests.get(url, headers=headers)
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 1124 篇原创博客
从订购之日起,案例 5 年内保证更新
- ⭐️ Python 爬虫 120,点击订购 ⭐️
- ⭐️ 爬虫 100 例教程,点击订购 ⭐️