如何用Python抓取span类中的比特币USD价格数据?
解决GDAX BTC-USD价格自动抓取并定时刷新的问题
嘿,看起来你已经搞定了价格提取的核心逻辑,就差把硬编码的HTML换成自动获取的页面内容,再加上定时刷新的功能了!咱们一步步来完善代码:
1. 替换硬编码HTML为真实页面请求
你之前手动写死了html变量,现在需要用urllib主动请求目标页面的内容。另外为了避免被网站的反爬机制拦截,建议给请求加上浏览器伪装的请求头:
from urllib.request import Request, urlopen # 替换原来的硬编码html行 req = Request(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}) uClient = urlopen(req) html = uClient.read() uClient.close()
2. 优化价格提取逻辑
页面上对应BTC价格的span应该只有一个,用find()代替find_all()更高效,同时加上判断避免找不到元素时报错:
price_span = soup.find('span', class_='MarketInfo_market-num_1lAXs') if price_span: price = price_span.text.replace('USD', '').strip() print(f"当前BTC-USD价格: {price}") else: print("警告:未找到目标价格元素,请检查页面类名是否更新")
3. 添加定时刷新功能
用time模块的sleep()函数实现每30秒刷新一次的循环逻辑,把整个抓取流程放进循环里:
完整代码整合
from urllib.request import Request, urlopen from bs4 import BeautifulSoup import time url = 'https://www.gdax.com/trade/BTC-USD' while True: # 伪装浏览器请求页面 req = Request(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}) uClient = urlopen(req) html = uClient.read() uClient.close() # 解析HTML soup = BeautifulSoup(html, "html.parser") price_span = soup.find('span', class_='MarketInfo_market-num_1lAXs') # 提取并打印价格 if price_span: price = price_span.text.replace('USD', '').strip() print(f"当前BTC-USD价格: {price}") else: print("警告:未找到目标价格元素,请检查页面类名是否更新") # 等待30秒后再次刷新 time.sleep(30)
额外注意点
- 如果运行后发现找不到价格元素,大概率是页面是JavaScript动态渲染的,
urllib只能获取静态HTML。这种情况下可以换成selenium或requests-html这类能处理动态内容的库。 - 频繁请求可能会触发网站的IP封禁,建议适当延长刷新间隔,或者添加随机延迟。
内容的提问来源于stack exchange,提问作者cmd
相关产品推荐
相关产品推荐

