Python requests请求DeviantArt接口返回不完整JSON问题求助
问题解决方案
核心原因
服务端设置了反爬策略,会校验请求的身份标识,requests默认的请求特征被识别为爬虫,因此返回截断后的不完整数据。
具体修复步骤
- 补充请求头模拟浏览器特征
首先需要把浏览器访问该接口时带的User-Agent、Referer字段复制到代码的请求头中,避免被直接识别为爬虫。User-Agent可以直接用以下常用Chrome标识,也可以打开浏览器控制台的「网络」标签,找到对应接口请求复制真实的UA值,匹配度更高效果更好。 - 补充Cookie(可选,适配需要登录查看的内容)
如果你是在登录状态下才能在浏览器拿到完整数据,说明部分内容仅对登录用户开放,需要把浏览器中对应站点的Cookie也复制到请求头中。
修复后代码示例
import requests headers = { # 替换为你自己浏览器的真实UA效果更好 "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://www.deviantart.com/Dreamsquid/gallery" } # 如果需要加Cookie,就在headers里加"Cookie": "你复制的浏览器Cookie字符串" jsonUrl = "https://www.deviantart.com/_napi/da-user-profile/api/gallery/contents?username=Dreamsquid&offset=48&limit=24&folderid=58533887" response = requests.get(jsonUrl, headers=headers) jsonResponse = response.json() print(jsonResponse)
额外注意事项
- 可以先打印
response.status_code确认请求状态是否为200,如果返回4xx/5xx状态码可以进一步定位是权限问题还是参数错误 - 控制请求频率,避免短时间内发起大量请求触发站点的限流规则,导致IP被临时封禁
内容的提问来源于stack exchange,提问作者user9634100
相关产品推荐
相关产品推荐

