我想从以下网站获取比特币的价格:https://www.coindesk.com/price/bitcoin 但是我不确定该怎么做,我对编码还很陌生。
到目前为止,这是我的代码,我不确定自己做错了什么。预先感谢。
from bs4 import BeautifulSoup
import requests
r = requests.get('https://www.coindesk.com/price/bitcoin')
r_content = r.content
soup = BeautifulSoup(r_content, 'lxml')
p_value = soup.find('span', {'class': "currency-price", "data-value": True})['data-value']
print(p_value)
这是结果:
回溯(最近通话最近):文件 “ C:/Users/aidan/PycharmProjects/scraping/Scraper.py”,第8行,在 p_value = soup.find('span',{'class':“ currency-price”,“ data-value”:True})['data-value'] TypeError:'NoneType'对象不是 可订阅的
答案 0 :(得分:1)
内容从返回json的API调用动态获取。您可以使用货币列表或单一货币。使用a[::-3]
不会运行javascript,并且不会将内容添加到DOM中,并且会进行各种DOM更改,以使html不会出现在浏览器中。
requests
答案 1 :(得分:0)
这里的问题是soup.find()
调用没有返回值(也就是说,没有span
带有您在页面上定义的属性),因此当您尝试获取{{ 1}}没有字典可以查找。
答案 2 :(得分:0)
您的网站没有以html格式保存数据,因此您无法抓取数据,但是它们使用的是您可以使用的端点:
data = requests.get('https://production.api.coindesk.com/v1/currency/ticker?currencies=BTC').json()
p_value = data['data']['currency']['BTC']['quotes']['USD']['price']
print(p_value)
# output: 11375.678380772
价格一直在变化,所以我的输出可能会有所不同