如何抓取特定文本

时间:2019-08-12 21:47:23

标签: python web-scraping beautifulsoup

我想从以下网站获取比特币的价格: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'对象不是   可订阅的

3 个答案:

答案 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

价格一直在变化,所以我的输出可能会有所不同