返回
如何突破验证码:使用 Cookie 征服受保护网站?
python
2024-03-16 07:26:35
突破验证码:使用 Cookie 征服受保护网站
前言
在网络爬取的广阔领域中,验证码常常成为一道令人沮丧的障碍,阻止我们获取宝贵的数据。这些恼人的障碍旨在将机器人拒之门外,但对于合法的人类爬虫而言,它们却构成了不必要的麻烦。
问题:验证码的顽固本质
当你尝试使用 Python 的 Requests 库爬取受验证码保护的网站时,你会发现验证码不断重新出现,阻碍你的进程。这是因为网站会在一段时间后使 cookie 失效,而 cookie 是维护你会话状态的关键。
解决方案:持久且重生的 cookie
要解决这个问题,我们需要采取以下措施:
- 获取持久 cookie: 从网站获取 cookie 时,确保它们的有效期足够长,以减少验证码出现的频率。
- 定期刷新 cookie: 即使 cookie 具有较长的有效期,它们也可能随着时间的推移而失效。通过定期刷新 cookie,我们可以确保它们始终处于活动状态。
- 使用代理: 代理可以防止网站检测到来自同一 IP 地址的大量请求,从而避免触发验证码机制。
- 轮换用户代理: 类似于使用代理,轮换用户代理可以使网站更难检测到机器人活动。
- 解决验证码(可选): 如果上述方法均无法奏效,你可能需要求助于第三方服务或使用其他技术(如 OCR)来解决验证码。
示例代码:刷新 cookie 的艺术
以下 Python 代码展示了如何使用定期刷新的 cookie 来爬取受验证码保护的网站:
import requests
import time
# 获取持久 cookie
cookie = 'portalbnmp=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJndWVzdF9wb3J0YWxibm1wIiwiYXV0aCI6IlJPTEVfQU5PTllNT1VTIiwiZXhwIjoxNzEwNjY2NDIxfQ.OA2voTGmab-PUk5Zn0zDnVJfxAlOmsxyRVmyjEinj_bS9Zr8DYxcjrPHpFGUUdkOd-_et2AFEwyxwj7VN6Eobw'
# 设置请求头
request_headers = {
'accept': 'application/json',
'accept-encoding': 'gzip, deflate, br, zstd',
'accept-language': 'pt-PT,pt;q=0.9,en-US;q=0.8,en;q=0.7',
'origin': 'https://portalbnmp.cnj.jus.br',
'referer': 'https://portalbnmp.cnj.jus.br/',
'content-type': 'application/json;charset=UTF-8',
'cookie': cookie,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}
# 设置请求 URL
request_url = 'https://portalbnmp.cnj.jus.br/bnmpportal/api/pesquisa-pecas/filter?page=0&size=10&sort='
# 主循环
while True:
# 刷新 cookie
cookie = requests.get('https://portalbnmp.cnj.jus.br/bnmpportal/api/auth/refresh').cookies
# 设置新的 cookie
request_headers['cookie'] = cookie
# 发送请求
resp = requests.post(url=request_url, headers=request_headers, data=json.dumps(payload))
# 检查响应状态
if resp.status_code == 200:
# 处理响应
...
else:
# 如果出现验证码,重新开始循环
continue
# 暂停一段时间,避免触发验证码
time.sleep(1)
结论:破解验证码难题
通过掌握持久 cookie、定期刷新、代理和用户代理轮换的艺术,你将能够绕过验证码并成功爬取受保护网站。这些技巧将为你打开一个充满信息的宝库,让你的爬虫任务更上一层楼。
常见问题解答:
- 为什么使用 cookie 来爬取受验证码保护的网站?
Cookie 允许你维护会话状态,即使验证码刷新,你也可以继续爬取。 - 刷新 cookie 的最佳频率是多少?
最佳频率取决于网站的验证码机制,可以根据经验进行调整。 - 我应该使用哪些代理和用户代理?
选择高匿代理和广泛的用户代理池,以增加成功率。 - 如果我仍然遇到验证码,我该怎么办?
考虑使用第三方 OCR 服务或其他专门解决验证码的技术。 - 在使用 cookie 爬取受验证码保护的网站时,我需要注意什么?
遵守网站的条款和条件,避免滥用爬虫技术,并确保你的爬虫行为符合道德标准。