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

XHR请求预览显示数据但响应无内容,Scrapy如何获取目标数据?

问题分析与解决方案

你的代码存在两个核心问题,导致返回的search_results字段为空:

1. 请求方法错误

你构造的URL带有明确的查询参数(?cid=31&flavours=...),这类参数属于GET请求的参数格式,但你代码中强制使用了POST方法,服务器无法正确解析参数,因此返回空数据。

2. 缺少AJAX请求验证头

多数网站会校验请求是否为合法的AJAX请求,需要携带X-Requested-With: XMLHttpRequest头标识,同时Referer头用于验证请求来源,缺少这些头会被服务器判定为非法请求,拒绝返回有效数据。

修正后的代码

import scrapy
from scrapy import Spider

class Whizzky(Spider):
    name = "whizzky"
    
    def start_requests(self):
        # 先访问页面,让Scrapy自动维护会话Cookie(部分网站需要)
        yield scrapy.Request(
            url="https://www.whizzky.net/finder_results.php",
            callback=self.parse
        )

    def parse(self, response):
        request_url = "https://www.whizzky.net/webapi/get_finder_results.php?cid=31&flavours=&view=rated&price=3&country=&regions="
        # 使用GET方法,并添加AJAX请求必要的头信息
        yield scrapy.Request(
            url=request_url,
            method='GET',
            headers={
                'X-Requested-With': 'XMLHttpRequest',
                'Referer': 'https://www.whizzky.net/finder_results.php'
            },
            callback=self.parse_2
        )

    def parse_2(self, response):
        info = {}
        info["data"] = response.json()["search_results"]
        yield info

额外调试建议

如果修正后依然返回空数据,打开浏览器开发者工具的Network面板,找到目标XHR请求,完全复刻以下信息:

  • 所有请求头(尤其是Cookie、User-Agent)
  • 请求参数的位置(GET参数/POST表单数据)
  • 请求方法(GET/POST)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:35:24