You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用Selenium时Python终端爬虫如何完成验证码校验访问站点

RARBG爬虫验证码校验实现方案

问题说明

开发终端网页爬虫访问目标种子站点时,直接发起搜索页请求会被重定向到威胁检测页面,需要完成页面内置的基础验证码校验后才能正常访问资源内容,初始实现代码如下:

import requests
from bs4 import BeautifulSoup

response = requests.get("https://rarbg.to/torrents.php?search=some+show")
soup = BeautifulSoup(response.text, features='html.parser')

# 操作soup对象,在终端向用户展示所有可获取的种子资源

核心实现逻辑

整个流程的关键是维持同一会话上下文,验证码校验状态是通过Cookie绑定到对应会话的,零散的独立请求无法通过校验,具体步骤如下:

  • 初始化requests.Session()实例,所有请求都通过该实例发起,自动留存校验通过后下发的Cookie
  • 首次发起搜索页请求,会话会自动跳转到威胁校验页,从返回的HTML中解析出两个核心内容:验证码图片的相对路径、校验表单的所有隐藏参数字段(一般是防跨站的校验token,漏传会直接校验失败)
  • 通过会话请求验证码图片的二进制内容,用Pillow做图像预处理(转灰度、二值化去除简单噪点,该站点验证码干扰极少,预处理后识别率极高),再搭配pytesseract识别出验证码文本(Pillow本身只做图像处理,不具备OCR识别能力,需要搭配Tesseract引擎使用)
  • 构造POST请求,把之前解析到的隐藏表单参数、识别出的验证码文本作为表单数据,提交到校验页的表单处理地址
  • 校验通过后,会话会自动留存访问权限Cookie,此时再用同一个会话发起搜索页请求,就能拿到正常的种子列表HTML,后续即可用BeautifulSoup解析内容在终端展示

参考实现代码

import requests
from bs4 import BeautifulSoup
from PIL import Image
import pytesseract
import io
import time

# 初始化会话,替换成正常浏览器的UA避免被直接拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}
s = requests.Session()
s.headers.update(headers)

# 首次访问触发校验跳转
target_url = "https://rarbg.to/torrents.php?search=some+show"
defense_resp = s.get(target_url)
defense_soup = BeautifulSoup(defense_resp.text, features="html.parser")

# 解析表单数据和验证码地址
form = defense_soup.find("form", {"name": "captcha"})
captcha_img_rel = form.find("img")["src"]
captcha_img_url = f"https://rarbg.to{captcha_img_rel}"
submit_url = f"https://rarbg.to{form['action']}"

# 收集所有隐藏表单字段
form_data = {}
for hidden_input in form.find_all("input", {"type": "hidden"}):
    form_data[hidden_input["name"]] = hidden_input["value"]

# 获取并识别验证码
captcha_resp = s.get(captcha_img_url)
img = Image.open(io.BytesIO(captcha_resp.content))
# 简单二值化预处理提升识别率
img = img.convert("L")
threshold = 127
img = img.point(lambda p: p > threshold and 255 or 0)
captcha_text = pytesseract.image_to_string(img).strip()
form_data["captcha"] = captcha_text

# 提交验证码校验
s.post(submit_url, data=form_data)
# 短暂延时避免请求过快被拦截
time.sleep(2)

# 再次请求目标页即可拿到正常内容
final_resp = s.get(target_url)
soup = BeautifulSoup(final_resp.text, features="html.parser")
# 后续解析种子列表逻辑写在这里

注意事项

  • 本地需要提前安装Tesseract OCR引擎,同时安装对应Python依赖pytesseract、Pillow
  • 如果识别准确率不足,可以调整二值化阈值,或者手动加去噪逻辑,该站点验证码字符无扭曲、干扰线极少,基本不需要复杂处理就能达到很高的识别率
  • 请求频率不要过高,短时间大量请求会被站点直接封禁IP

内容的提问来源于stack exchange,提问作者Utshaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:48:19