如何从指定URL抓取JSON文件并打印内容?代码运行失败求助
解决CoinMarketCap快速搜索JSON抓取失败的问题
Hey,我瞅了下你写的代码,没法正常工作的核心原因是CoinMarketCap的基础反爬机制把你的请求拦住了——requests库默认的请求头没有携带浏览器标识,网站会直接拒绝返回有效的JSON内容,导致你用json.loads解析时出错。
给你改好了代码,主要加了模拟浏览器的请求头,还优化了错误处理:
import requests import json url = "https://s2.coinmarketcap.com/generated/search/quick_search.json" # 添加模拟真实浏览器的请求头,绕过基础反爬 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" } try: # 携带请求头发起请求 r = requests.get(url, headers=headers) # 先检查请求是否成功,比如403、500这类状态码会直接抛出异常 r.raise_for_status() # 用requests内置的json()方法解析,比手动loads更省心 cont = r.json() print(cont) except requests.exceptions.HTTPError as e: print(f"请求失败,状态码错误:{e}") except json.JSONDecodeError: print("返回的内容不是有效的JSON,大概率还是被反爬拦截了,可以试试更新User-Agent")
几个关键的修复细节:
- 添加
User-Agent:这是最基础的反反爬手段,让网站误以为请求来自真实的浏览器,而不是自动化脚本 - 用
r.json()代替json.loads(r.content):requests已经封装了JSON解析逻辑,能自动处理编码问题,代码更简洁 - 增加异常捕获:能帮你快速定位问题——是请求被拦截了,还是返回内容有问题
另外要提醒下,CoinMarketCap的反爬规则可能会随时更新,如果以后这个方法失效了,建议优先考虑使用他们的官方API(如果有开放的话),避免触发更严格的反爬措施。
内容的提问来源于stack exchange,提问作者j.doe
相关产品推荐
相关产品推荐

