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

Scrapy爬取freepatentsonline.com无数据返回求助(状态码200)

排查Scrapy爬取返回200但无数据(partial内容)的原因
  • 请求头模拟不完整:该网站可能会验证请求头的合法性,默认Scrapy请求头容易被识别为爬虫。检查是否配置了接近真实浏览器的请求头,比如在settings.py里设置:

    DEFAULT_REQUEST_HEADERS = {
        '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',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
        'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3'
    }
    
  • 页面内容动态加载:如果目标数据是通过JavaScript渲染加载的,Scrapy默认只能获取静态HTML,自然抓不到数据。可以:

    • 打开浏览器开发者工具的Network面板,找到加载数据的AJAX接口,直接请求接口获取结构化数据;
    • 使用scrapy-splash或playwright等工具渲染动态页面,获取完整渲染后的HTML。
  • 反爬触发限制:网站可能对请求频率、IP做了限制,即使返回200状态码,也仅返回部分内容。可以尝试:

    • 在settings.py设置DOWNLOAD_DELAY = 3增加请求间隔;
    • 配置IP代理,在DOWNLOADER_MIDDLEWARES中添加代理中间件;
    • 手动携带浏览器的Cookie测试,部分网站需要Cookie验证会话身份。
  • 响应编码问题:返回内容的编码不正确会导致解析失败,看起来像空数据。可以在parse方法里手动指定编码解码:

    html_content = response.body.decode('utf-8')  # 若无效可尝试ISO-8859-1等编码
    
  • 选择器匹配错误:确认你的XPath/CSS选择器是否正确。先把响应内容保存到本地,检查实际页面结构:

    with open('test_response.html', 'wb') as f:
        f.write(response.body)
    

    打开文件后验证目标数据是否存在,再调整选择器的匹配规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:45:40