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

Python脚本爬取路透社文章遭遇HTTP 401错误求助

解决路透社爬虫401问题的方案

核心原因分析

路透社近期升级了反爬机制,不再接受普通HTTP请求(即使补全请求头),而是要求请求来自能执行JavaScript的真实浏览器环境,同时会检测广告拦截工具特征,你的脚本被识别为非合法请求,因此返回401状态码。

具体解决步骤

  • 改用JS渲染工具:放弃直接用requests发送请求,换成playwright或selenium模拟真实浏览器,它们能自动执行页面JS,绕过这类环境检测。推荐playwright,配置更简单且自带浏览器驱动。
  • 模拟真实浏览器指纹:即使使用渲染工具,也要确保请求头、浏览器参数和真实用户一致。比如设置最新的user-agent,禁用webdriver标识(避免被识别为爬虫)。
  • 规避广告拦截检测:模拟浏览器时不要加载广告拦截扩展,同时可以通过脚本禁用页面的广告拦截检测逻辑。
  • 控制请求频率:如果请求过于频繁,IP可能被临时封锁,建议每次请求后加10-30秒的随机延迟,必要时使用代理IP轮换。

示例代码(Playwright版本)

from playwright.sync_api import sync_playwright
import time
import random

def get_reuters_html(url):
    with sync_playwright() as p:
        # 启动无头Chrome,模拟真实浏览器
        browser = p.chromium.launch(headless=True)
        page = browser.new_page(
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
        )
        # 隐藏webdriver标识,避免被检测
        page.add_init_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
        # 禁用页面的广告拦截检测(部分网站会通过JS检查)
        page.add_init_script("window.__adblock = false;")
        
        # 访问页面,等待网络空闲后再获取内容
        page.goto(url, wait_until="networkidle")
        # 随机延迟,模拟用户阅读行为
        time.sleep(random.randint(5, 10))
        
        html_content = page.content()
        browser.close()
        return html_content

# 使用示例
target_url = "https://www.reuters.com/articles/your-target-article"
article_html = get_reuters_html(target_url)
# 后续可以继续处理HTML内容,传给AWS Polly

注意事项

  1. 安装依赖:先执行pip install playwright,再运行playwright install chromium安装浏览器。
  2. 定期更新user-agent:可以从浏览器开发者工具复制最新的user-agent字符串,避免因版本过旧被拦截。
  3. 若遇到Cloudflare人机验证:这种情况需要额外处理,比如使用支持验证码自动识别的服务,或者手动验证一次后保存cookie复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:21:09