You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python网页爬取问题:返回空值,请求协助获取比特币价格

解决CoinMarketCap比特币价格爬取返回空值的问题

嘿,刚入门Python爬虫遇到这种问题太正常了,别慌!你的代码返回空值主要是两个原因:目标网站的页面结构已经更新,你用的那串冗长CSS选择器完全匹配不上现在的元素;另外直接裸请求可能被网站的反爬机制拦截,拿到的不是完整页面内容。下面一步步帮你搞定:

问题拆解

  1. 旧选择器失效:CoinMarketCap的页面结构经常迭代,你写的html.js.video.videoautoplay body div.container...a.price这种链式层级选择器太依赖旧的DOM结构,现在根本找不到对应的元素。
  2. 反爬拦截:直接用requests.get()发起请求,很容易被识别为爬虫,返回的内容可能是不完整的页面或者反爬提示,自然解析不到数据。

修正后的代码方案

试试下面的代码,我已经适配了当前(2024年)的页面结构,还加了基础的反爬处理:

import bs4
import requests

# 模拟真实浏览器的请求头,避免被反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

url = 'https://coinmarketcap.com/'
res = requests.get(url, headers=headers)

# 先检查请求是否成功,排除网络或反爬问题
if res.status_code != 200:
    print(f"请求失败,状态码:{res.status_code}")
else:
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    # 用更稳定的属性定位比特币卡片,再提取价格
    btc_card = soup.find('div', {'data-symbol': 'BTC'})
    if btc_card:
        btc_price = btc_card.find('span', class_='sc-a0353bbc-0 jxpCgO').text
        print(f"当前比特币价格:{btc_price}")
    else:
        print("未找到价格元素,可能页面结构又更新了")

关键知识点说明

  • 请求头(User-Agent):模拟真实浏览器的请求标识,避免被网站直接判定为爬虫拦截。
  • 简化定位逻辑:用data-symbol="BTC"直接定位比特币的卡片模块,再从中找价格元素,比链式层级选择器更稳定,就算页面小幅度更新也不容易失效。
  • 状态码检查:先确认请求是否成功,能快速排除网络问题或反爬导致的页面获取失败。

如果之后页面又更新了,你可以用浏览器的开发者工具(按F12)来查看新的元素结构:右键价格区域→检查,就能看到最新的元素类名或属性,然后调整代码里的选择器就行。

内容的提问来源于stack exchange,提问作者Holmes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:46:29