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

如何用Python从HTML提取文本、获取动态验证码并获取KEY

如何用Python从长HTML提取文本并处理动态验证码

嘿,我来帮你搞定这两个问题——首先是HTML文本提取,你用strip()肯定没用,因为它根本处理不了HTML的标签结构;然后是动态验证码的事儿,得看具体类型来选方案,咱们一步步说:

一、从长HTML提取文本:用专业解析库替代strip()

strip()只能移除字符串首尾的空白字符,完全没法识别HTML标签,所以处理HTML文本必须用专门的解析工具。推荐两个:BeautifulSoup(上手简单,适合大多数场景)和lxml(解析速度极快,适合超大型HTML页面)。

1. 先装依赖

打开终端装包:

pip install beautifulsoup4 lxml

2. 提取文本的示例代码

假设你已经通过requests拿到了HTML内容,直接用BeautifulSoup解析:

from bs4 import BeautifulSoup
import requests

# 先获取目标页面的HTML
target_url = "你的目标页面URL"
response = requests.get(target_url, headers={"User-Agent": "Mozilla/5.0"})  # 加UA伪装,避免被反爬
html_content = response.text

# 用lxml解析器初始化BeautifulSoup(速度快)
soup = BeautifulSoup(html_content, "lxml")

# 提取所有文本,自动剔除HTML标签
raw_text = soup.get_text()

# 可选:整理文本,去掉多余的换行和连续空格
clean_text = ' '.join(raw_text.split())
print(clean_text)

get_text()会把所有HTML标签过滤掉,只保留纯文本;split()+join()的操作能把杂乱的换行、多空格统一成单个空格,让长页面的文本更整洁。

如果是特别长的HTML(比如几万行那种),lxml解析器的速度会比默认的html.parser快好几倍,所以一定要指定"lxml"作为第二个参数。

二、处理动态验证码,获取KEY

动态验证码分好几种类型,不同类型的解决方案差异很大,我给你列几种最常见的场景:

1. 普通图片验证码(后端返回静态图片)

如果验证码是一张独立的图片(比如URL是/api/captcha),可以试试OCR识别:

  • 首先得装pytesseract和Tesseract OCR引擎(注意:Tesseract需要单独去官网下载安装,不是用pip装的)
  • 示例代码:
import requests
from PIL import Image
import pytesseract

# 获取验证码图片
captcha_url = "验证码图片的URL"
# 加headers伪装成浏览器请求
headers = {"User-Agent": "Mozilla/5.0"}
img = Image.open(requests.get(captcha_url, headers=headers, stream=True).raw)

# 预处理图片,提高识别率(转灰度+二值化)
img_gray = img.convert('L')
img_binary = img_gray.point(lambda x: 0 if x < 127 else 255, '1')

# 识别验证码
captcha_code = pytesseract.image_to_string(img_binary).strip()
print(captcha_code)

但这种方法对带干扰线、扭曲文字的验证码准确率很低,如果网站用了这类复杂验证码,可能得考虑付费的第三方验证码识别API,或者用模拟浏览器的方式。

2. 前端Canvas生成的动态验证码

这类验证码的图片是在浏览器里用Canvas绘制的,没法直接通过URL获取,这时候得用Selenium模拟真实浏览器操作:

from selenium import webdriver
from PIL import Image
import pytesseract
import base64

# 初始化Chrome浏览器(需要下载对应版本的ChromeDriver)
driver = webdriver.Chrome()
driver.get("目标页面URL")

# 获取Canvas元素,把它转成base64格式的图片数据
canvas = driver.find_element_by_tag_name("canvas")
canvas_base64 = driver.execute_script("return arguments[0].toDataURL('image/png').substring(21);", canvas)

# 把base64转成图片文件
img_data = base64.b64decode(canvas_base64)
with open("captcha_temp.png", "wb") as f:
    f.write(img_data)

# 识别验证码(和上面的步骤一样)
img = Image.open("captcha_temp.png")
captcha_code = pytesseract.image_to_string(img).strip()

# 填写验证码并提交表单
driver.find_element_by_id("captcha-input").send_keys(captcha_code)
driver.find_element_by_id("submit-btn").click()

# 拿到KEY后可以提取页面内容
key_element = driver.find_element_by_id("key-display")
target_key = key_element.text
print(target_key)

# 记得关闭浏览器
driver.quit()

3. 复杂验证码(滑块、文字点选、行为验证)

这类验证码是专门防爬虫的,OCR基本没用,解决方案有两种:

  • 用Selenium结合OpenCV模拟人工操作:比如滑块验证码,用OpenCV识别缺口位置,然后模拟鼠标拖动;文字点选的话,识别文字位置再模拟点击。
  • 第三方验证码识别服务:很多平台提供这类API,你只需要上传验证码图片或传递页面信息,就能拿到识别结果(但需要付费)。

⚠️ 重要提醒:很多网站禁止爬虫行为,使用这些方法前一定要仔细阅读网站的robots协议和用户条款,避免违反法律或网站规定。

最后补充一句:不管是提取文本还是处理验证码,都要注意反爬机制,比如给请求加合理的headers、控制请求频率、用代理IP(如果需要),避免被网站封禁IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:59:52