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

更新因JavaScript拦截失效的Python网页爬虫

NYTimes爬虫应对JS验证的轻量解决方案

一、高频调用下无需渲染JS的轻量方案

1. 挖掘隐藏API

很多新闻站点会为移动端APP、小程序提供无验证的内容接口,直接返回结构化JSON数据(包含完整文章内容)。你可以通过以下方式获取:

  • 用抓包工具监控NYTimes官方APP的网络请求,过滤出返回文章内容的接口;
  • 切换浏览器的移动端模拟器,查看Network面板中的XHR/Fetch请求,寻找返回完整文章数据的接口。
    这类接口无需处理JS验证,直接用requests请求即可,效率远高于渲染JS。

2. 优化请求头与请求行为

如果找不到隐藏API,可通过模拟真实人类请求绕过基础JS验证:

  • 完善请求头:使用最新版浏览器的User-Agent,补充Accept、Accept-Language、Referer、Cookie(手动登录NYTimes后提取有效Cookie,用requests.Session保持会话);
  • 控制请求频率:添加1-3秒的随机延迟,避免固定间隔请求;用代理池轮换IP,防止因高频请求被标记;
  • 尝试搜索引擎爬虫UA:使用Googlebot、Bingbot的UA(如Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)),部分站点会对搜索引擎爬虫开放无验证内容,但注意不要过度使用。

二、轻量JS渲染库推荐与实现方法

如果上述方案不可行,推荐以下资源占用低的JS渲染工具,适配轻量服务器:

1. Playwright(轻量配置版)

Playwright支持无头模式,通过资源拦截可大幅降低内存占用:

  • 安装:pip install playwright,再执行playwright install chromium(仅安装轻量Chromium内核);
  • 核心优化配置:启用无头模式、拦截非必要资源(图片、视频、CSS)、复用浏览器实例;
  • 代码示例:
from playwright.sync_api import sync_playwright

def fetch_nytimes_article(url):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True, args=["--disable-gpu", "--no-sandbox"])
        context = browser.new_context(viewport={"width": 1920, "height": 1080})
        page = context.new_page()
        
        # 拦截非必要资源
        page.route("**/*.{png,jpg,jpeg,css,mp4}", lambda route: route.abort())
        
        page.goto(url, wait_until="domcontentloaded")
        page.wait_for_selector("article")
        
        content = page.inner_html("article")
        browser.close()
        return content

2. requests-html(轻量替代,虽已停更但仍可用)

requests-html基于Pyppeteer,封装简洁,资源占用低于完整Puppeteer:

  • 安装:pip install requests-html;
  • 代码示例:
from requests_html import HTMLSession

session = HTMLSession()
r = session.get(url)
# 渲染JS(仅加载必要内容)
r.html.render(scrolldown=0, sleep=1, timeout=10, keep_page=False)
content = r.html.find("article", first=True).html
session.close()

关键优化点

  • 复用浏览器会话:不要每次请求都创建新的浏览器实例,通过全局变量或会话池保持实例复用;
  • 限制并发数:轻量服务器建议控制并发在2-5以内,避免内存过载;
  • 禁用不必要的浏览器特性:如GPU加速、沙箱模式(--no-sandbox),进一步降低资源占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:57:28