python爬虫工程师 | 都会遇到的反爬手段,详细展示低难度反爬
在爬虫实战过程中,常见的反爬手段如下所示。
IP 地址限制
:网站可以检测爬虫的 IP 地址,并限制爬虫访问。User-Agent 限制
:网站可以通过检测请求头中的 User-Agent 来识别爬虫。Referrer 限制
:网站可以通过检测请求头中的 Referrer 字段来识别爬虫。Cookies 限制
:网站可以通过在响应中发送 Cookies 来识别爬虫。频率限制
:网站可以限制爬虫访问频率,以防止爬虫对网站造成过多压力。JavaScript 混淆
:网站可以使用 JavaScript 混淆技术来防止爬虫识别页面内容。HTTPS 加密
:网站可以使用 HTTPS 加密协议来防止爬虫抓取数据。
IP地址限制
IP 地址限制是指网站可以通过检测请求的 IP 地址,并限制特定 IP 地址访问网站。
这是一种常用的反爬手段,主要用于防止爬虫对网站造成过多压力。
下面是一个 Python 代码示例,使用了 requests 库进行请求,并在请求头中指定了代理 IP 地址:
import requests
url = "https://pachong.vip"
# 设置代理 IP 地址
proxies = {
"http": "http://代理IP:端口",
"https": "http://代理IP:端口",
}
# 注意 proxies 参数
response = requests.get(url, proxies=proxies)
print(response.text)
如果网站限制了特定 IP 地址的访问,使用代理 IP 地址就可以绕过限制,并成功抓取数据。
User-Agent 限制
User-Agent 限制是指网站可以通过检测请求头中的 User-Agent 字段,识别请求来源是否是爬虫。
如果识别为爬虫,网站将限制或拒绝该请求。
下面是 User-Agent 字段的格式:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
:point_right: 为了绕过 User-Agent 限制,可以在请求头中指定一个常见的浏览器 User-Agent,以模拟浏览器访问,以下是代码示例:
import requests
url = "https://pachong.vip"
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.3'
}
response = requests.get(url, headers=headers)
print(response.text)
Referrer 限制
Referrer 限制是指网站可以通过检测请求头中的 Referrer 字段,识别请求的来源。
如果识别为爬虫,网站将限制或拒绝该请求。
下面是 Referrer 字段的格式:
Referer: https://www.example.com
为了绕过 Referrer 限制,可以在请求头中不指定 Referrer,或者指定一个普遍的 Referrer,以下是使用 Python 的 Requests 库的代码示例:
import requests
url = "https://pachong.vip"
headers = {
'Referer': 'https://pachong.vip'
}
response = requests.get(url, headers=headers)
print(response.text)
Cookies 限制
Cookies 限制反爬是指在服务器端使用 Cookies 技术限制爬虫访问数据的手段。
Cookies 是一种存储在客户端的数据结构,用于识别客户端与服务器端的会话。
服务器端可以使用 Cookies 存储登录信息,并在每次请求时发送给客户端,以识别客户端的身份。
如果服务器端使用 Cookies 限制爬虫访问数据,只有携带正确 Cookies 的请求才能够获得正确数据。
下面是使用 Python 爬取网站数据,并携带 Cookies 的代码示例:
import requests
# 设置 Cookies
cookies = {
"Cookie1": "xiangpica",
"Cookie2": "beautiful",
}
# 发送请求,并携带 Cookies
response = requests.get("https://pachong.vip", cookies=cookies)
# 打印响应数据
print(response.text)
频率限制反爬
频率限制反爬是指在服务器端限制客户端的请求频率的反爬手段。
服务器端可以限制一个 IP 地址每秒只能发送 10 次请求,如果超过这个频率,则直接拒绝请求。
Tips:频率限制反爬可以防止爬虫短时间内大量请求数据,防止服务器被爬虫程序消耗资源,影响服务器正常功能。
import time
import requests
# 请求频率,每秒请求次数
frequency = 10
# 记录请求开始时间
start_time = time.time()
# 记录请求次数
request_count = 0
while True:
# 如果请求次数小于请求频率
if request_count < frequency:
# 发送请求
response = requests.get("https://pachong.vip")
# 打印响应数据
print(response.text)
# 增加请求次数
request_count += 1
# 如果请求次数等于请求频率
if request_count == frequency:
# 计算已经用时
elapsed_time = time.time() - start_time
# 如果已经用时小于 1 秒
if elapsed_time < 1:
# 等待剩余时间
time.sleep(1 - elapsed_time)
# 重置请求开始时间
start_time = time.time()
# 重置请求次数
request_count = 0
学习时先声明请求频率变量: frequency
,并在循环中使用该值来控制请求次数。
每次请求时,我们检查请求次数是否小于请求频率。
如果是,我们就发送请求,并增加请求次数。
如果请求次数等于请求频率,我们就计算已经用时的时间,并等待剩余时间以使得请求频率不超过限制。
JavaScript 混淆
JavaScript 混淆反爬是一种防止爬虫自动获取网站内容的常见手段。在这种情况下,网站的某些关键数据可能已经被混淆,使其难以被自动抓取。
在 Python 中,我们可以使用 BeautifulSoup 和 Selenium 等库来处理 JavaScript 混淆反爬。
from selenium import webdriver
# 配置驱动器
driver = webdriver.Chrome()
# 访问混淆页面
driver.get("https://www.pachong.vip/blog")
# 获取混淆数据
data = driver.find_elements_by_name("list-group")[0].text
# 关闭浏览器
driver.quit()
HTTPS 加密反爬
HTTPS 加密是一种防止网络数据被窃取的常用技术,也是反爬技术的一部分。在 HTTPS 加密的情况下,爬虫程序无法直接访问网站数据,需要使用特定的方法来处理。
在 Python 中,我们可以使用 requests 库来处理 HTTPS 加密反爬:
import requests
# 访问 HTTPS 页面
response = requests.get("https://www.pachong.vip")
# 获取页面内容
content = response.text
# 打印页面内容
print(content)
如果网站使用的是自定义证书,您可以在请求时传递自定义证书。这样可以避免 SSL 证书错误,并且在请求时只验证指定的证书。
以下是使用自定义证书的代码示例:
import requests
# 访问 HTTPS 页面,使用自定义证书
response = requests.get("https://www.pachong.vip/secure-page", verify="./cert.pem")
# 获取页面内容
content = response.text
# 打印页面内容
print(content)
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 874 篇原创博客
- 点赞
- 收藏
- 关注作者
评论(0)