requests.get().text返回空字符串但浏览器可正常显示的问题排查
解决京东评论接口请求返回空内容的问题
问题分析
使用requests请求京东评论接口时返回空文本,无法解析JSON,但浏览器可正常访问,核心原因是京东反爬机制拦截了请求,仅靠User-Agent不足以通过验证,同时原代码存在语法错误也可能触发异常。
解决步骤
1. 修正代码语法错误
原代码中requests.get语句结尾符号错误,需将}改为),同时先打印响应状态码排查基础问题:
import requests url = 'https://club.jd.com/comment/productPageComments.action?productId=100002967883&score=0&sortType=5&page=72&pageSize=10&isShadowSku=0&rid=0&fold=1' header = {'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36' } response = requests.get(url = url, headers = header) # 修正结尾符号为) print(response.status_code) # 先检查响应状态码 data = response.json()
2. 补充必要请求头
京东接口会校验请求来源和会话信息,需添加referer(对应商品详情页URL)和从浏览器复制的cookie:
header = { 'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'referer': 'https://item.jd.com/100002967883.html', # 目标商品的详情页URL 'cookie': '粘贴你浏览器访问京东时的cookie内容' # 从Chrome开发者工具Network面板复制 }
3. 使用Session维持会话一致性
京东反爬会校验会话连续性,用requests.Session()先访问商品详情页获取合法会话,再请求评论接口:
import requests session = requests.Session() # 先访问商品页,初始化会话cookie item_url = 'https://item.jd.com/100002967883.html' session.get(item_url, headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'}) # 发起评论接口请求 comment_url = 'https://club.jd.com/comment/productPageComments.action?productId=100002967883&score=0&sortType=5&page=72&pageSize=10&isShadowSku=0&rid=0&fold=1' headers = { 'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'referer': item_url } response = session.get(comment_url, headers=headers) print(response.text) data = response.json()
4. 排查Selenium异常问题
若Selenium访问example.com返回空页面,大概率是ChromeDriver版本与浏览器版本不匹配,需下载对应版本的驱动;同时检查代理设置,确保Selenium使用的代理与系统一致。
5. 验证请求参数合法性
确认page=72是否为有效页数:若浏览器访问该URL时也无数据,需调整page参数为合法值。
内容的提问来源于stack exchange,提问作者yaoyhu
相关产品推荐
相关产品推荐

