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

使用Python Requests模块爬取网站图表数据返回空结果求助

解决建议

以下是针对请求返回空结果的具体排查和修复步骤:

  • 检查请求数据的提交方式
    如果你在浏览器中看到请求的Content-Type是application/json,代码中应该使用json=post_data而非data=post_data。data参数默认会以表单编码(application/x-www-form-urlencoded)发送数据,和原请求格式不匹配会导致后端无法解析,返回空结果。修改后的请求代码:

    results_post = r.post(postURL, json=post_data, cookies=search_cookies, headers=headers, verify=False)
    
  • 补全请求头信息
    仅携带User-Agent可能不够,网站可能会校验其他请求头字段,比如Referer、X-Requested-With(通常为XMLHttpRequest,标识AJAX请求)、Content-Type等。打开浏览器开发者工具的请求头面板,复制所有非自动生成的字段到headers字典中,比如:

    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
        "Referer": "https://xxx.com/xxx",
        "X-Requested-With": "XMLHttpRequest",
        "Content-Type": "application/json"
    }
    
  • 改用Session维持会话
    手动获取Cookie可能会遗漏部分由JS动态设置的会话信息,使用requests.Session()可以自动管理Cookie,更贴近浏览器的会话流程:

    import requests as r
    
    session = r.Session()
    session.verify = False
    session.headers.update(headers)
    
    # 先访问目标页面,初始化会话Cookie
    session.get(postURL)
    
    # 发送POST请求
    results_post = session.post(postURL, json=post_data)
    
  • 验证请求数据的完整性和格式
    对比浏览器载荷中的所有字段,确保post_data包含所有必填参数,字段名、大小写、数据类型(比如数字/字符串、数组/对象)完全一致。如果原请求载荷是JSON字符串,要确保post_data是Python字典而非字符串(用json=post_data会自动序列化)。

  • 查看完整响应内容
    不要直接调用json(),先打印响应状态码和原始文本,排查问题:

    print(results_post.status_code)
    print(results_post.text)
    

    如果状态码是403/401,说明存在反爬或权限校验;如果返回HTML页面而非JSON,可能是请求URL错误或触发了验证机制。

  • 检查是否需要CSRF Token
    部分网站会要求请求携带CSRF Token,通常可以在页面的HTML中找到(比如<meta name="csrf-token" content="xxx">)。先通过GET请求获取页面,提取Token后加到请求头或请求数据中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:32:28