使用Requests库爬取AJAX网站时XHR请求卡住无响应的问题求助
解决请求卡住无法获取AJAX数据的问题
看起来你的脚本一直卡住没输出,大概率是几个常见的爬坑点没注意到,我来帮你一步步排查解决:
1. 先修正URL里的转义字符
你URL里的&是HTML实体转义后的&,服务器没法正确解析这个转义字符,这很可能导致请求一直挂着得不到响应。把&换成正常的&就行,修正后的URL是:
https://prematch.planetwin365.it/api/mobileapp/v1.0/events/subevents/7/1?eventIds=7882&marketId=1
2. 必须模拟浏览器请求头
很多网站会直接拒绝没有User-Agent的请求,或者检查请求的来源合法性。你需要在请求里加上和浏览器一致的请求头,最关键的就是User-Agent,如果原XHR请求里有Referer也最好带上。
3. 给请求加上超时设置
你的代码没有设置超时,一旦服务器不响应,脚本就会无限等待。加上timeout参数,能让请求超时后抛出异常,方便你排查问题。
修正后的完整脚本
import requests # 修正后的URL url = 'https://prematch.planetwin365.it/api/mobileapp/v1.0/events/subevents/7/1?eventIds=7882&marketId=1' # 模拟Chrome浏览器的请求头,你也可以换成自己常用浏览器的UA headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Referer': 'https://prematch.planetwin365.it/' } try: # 发起GET请求,设置10秒超时 resp = requests.get(url, headers=headers, timeout=10) # 主动检查响应状态码,如果是4xx/5xx直接抛出异常 resp.raise_for_status() print(resp.text) except requests.exceptions.RequestException as e: print(f"请求出错啦: {e}")
后续排查方向如果还是不行
- 打开浏览器开发者工具,找到那个XHR请求,把所有Request Headers都复制到你的
headers字典里(比如Accept、Accept-Language、X-Requested-With这些AJAX请求常见的头)。 - 确认原XHR的请求方法:如果原请求是POST,那你需要把参数放到
data或者json参数里,而不是拼在URL上。 - 检查是否需要登录:如果这个接口需要登录权限,你得先模拟登录获取Cookie,然后在请求里带上
cookies参数。 - 反爬机制:如果以上都没用,可能网站有IP封禁或者验证码,这种情况可以试试换代理IP,或者放慢请求频率。
内容的提问来源于stack exchange,提问作者Longino
相关产品推荐
相关产品推荐

