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

网站爬取遇403错误及验证码拦截的解决方法咨询

爬虫遇到403后又遭Datadome拼图验证码拦截的解决思路

问题详情

使用requests库爬取https://www.leboncoin.fr/时,初始请求返回403错误,添加自定义请求头后403问题解决,但返回页面包含验证码拦截逻辑(页面提示"请启用JavaScript并禁用任何广告拦截器",实际是Datadome的反爬验证)。

我的爬虫代码

import requests

headers = {
    "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0",
    "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
}

page = requests.get("https://www.leboncoin.fr/", headers=headers)
print(page.text)

不符合预期的返回结果

<html>
<head><title>leboncoin.fr</title>
    <meta property="og:title" content="Rendez-vous sur leboncoin pour découvrir cette annonce !" />
<meta property="og:image" content="https://img.datadome.co/captcha/page-customization/1872/866d27bc-26b6-476e-b41d-496f3e0a7fb4.jpeg" />
    <style>#cmsg{animation: A 1.5s;}@keyframes A{0%{opacity:0;}99%{opacity:0;}100%{opacity:1;}}
</style>
</head>
<body style="margin:0">
    <p id="cmsg">请启用JavaScript并禁用任何广告拦截器</p>
    <script data-cfasync="false">var dd={'cid':'AHrlqAAAAAMAK9_SOZqlD0wAubFoPg==','hsh':'05B30BD9055986BD2EE8F5A199D973','t':'bv','s':2089,'e':'a80d02f20f355f979f960376ec28757d18dea1c6d5954e9447e59b99794c3ef2','host':'geo.captcha-delivery.com'};</script>
    <script data-cfasync="false" src="https://ct.captcha-delivery.com/c.js"></script>
</body>
</html>

解决思路

1. 改用支持JavaScript的浏览器自动化工具

requests是无JS环境的HTTP客户端,无法执行页面中的验证脚本(比如Datadome需要生成的验证参数),必须用能模拟真实浏览器行为的工具,比如Playwright或Selenium。

以Playwright为例,步骤如下:

  • 安装Playwright:pip install playwright,然后运行playwright install安装浏览器驱动
  • 编写代码模拟浏览器访问:
from playwright.sync_api import sync_playwright
import time

with sync_playwright() as p:
    # 启动Chrome浏览器(也可选用firefox/webkit)
    browser = p.chromium.launch(headless=False)  # 调试时设为False可查看浏览器窗口
    page = browser.new_page()
    
    # 模拟人类操作的随机延迟
    time.sleep(1)
    
    # 访问目标网站
    page.goto("https://www.leboncoin.fr/")
    
    # 等待页面加载完成,若需手动验证验证码可在此暂停
    page.wait_for_load_state("networkidle")
    
    # 获取页面内容
    content = page.content()
    print(content)
    
    browser.close()

2. 针对Datadome反爬的优化措施

  • 控制请求频率:添加1-3秒的随机延迟,避免短时间内大量请求触发拦截
  • 模拟人类行为:添加滚动页面、随机点击等操作,不要直接请求后立即获取内容
  • 使用代理IP:若IP被封禁,切换代理IP分散请求来源
  • 验证码处理:小规模爬取可手动验证拼图验证码,大规模爬取可使用验证码识别服务(需符合网站服务条款)

3. 合规性检查

爬取前务必查看目标网站的robots.txt和服务条款,确认网站是否允许爬虫行为,避免违反法律或网站规定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:21:12