返回

如何突破验证码:使用 Cookie 征服受保护网站?

python

突破验证码:使用 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、定期刷新、代理和用户代理轮换的艺术,你将能够绕过验证码并成功爬取受保护网站。这些技巧将为你打开一个充满信息的宝库,让你的爬虫任务更上一层楼。

常见问题解答:

  1. 为什么使用 cookie 来爬取受验证码保护的网站?
    Cookie 允许你维护会话状态,即使验证码刷新,你也可以继续爬取。
  2. 刷新 cookie 的最佳频率是多少?
    最佳频率取决于网站的验证码机制,可以根据经验进行调整。
  3. 我应该使用哪些代理和用户代理?
    选择高匿代理和广泛的用户代理池,以增加成功率。
  4. 如果我仍然遇到验证码,我该怎么办?
    考虑使用第三方 OCR 服务或其他专门解决验证码的技术。
  5. 在使用 cookie 爬取受验证码保护的网站时,我需要注意什么?
    遵守网站的条款和条件,避免滥用爬虫技术,并确保你的爬虫行为符合道德标准。