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=®ions=" # 使用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
相关产品推荐
相关产品推荐

