我正在尝试从这个 github 使用这个 python webscraper,但是自从编写了刮板以来,该网站略有变化,所以它不起作用,我不知道为什么。 https://github.com/heliphix/btc_data/blob/master/datacollector.py 在第 106 行:
values=soup.find_all('script')[5].get_text()
没有像它应该的那样从这个网页(https://bitinfocharts.com/comparison/transactions-btc.html)返回任何东西,我不知道为什么。我已经在我的代码中修复了它将使用哪个脚本,因为该站点已更新,它现在位于第 4 个脚本中,但即使我这样做了
values=soup.find_all('script')[4].get_text()
它仍然什么都不返回
values=soup.find_all('script')[4]
删除 .get_text() 将返回包含数据的代码部分,但我不知道如何从那里解析它。
我曾尝试使用 Simplified Scrapy 从 JS 函数中获取数据,但由于某种原因,这不适用于所有网页。
答案 0 :(得分:0)
如果我没猜错的话,您想提取哪些数据,但在这里作为示例,我尝试使用正则表达式、请求和汤来提取数据。我认为有一种优雅的方式来提取数据,但我试过了。希望对你有帮助。
from bs4 import BeautifulSoup
import requests
import re
url = 'https://bitinfocharts.com/comparison/bitcoin-transactions.html'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml').find_all('script')[4].string
# print(soup)
res = re.search(r'd = new Dygraph\(document.getElementById\(\"container\"\)\,(.*)ylabel',soup).groups(1)
script_4_data = res[0].split('{labels:')[0]
script_4_data = script_4_data[0:len(script_4_data)-2] # str type.
print(script_4_data) # list
# second step script 3
soup = BeautifulSoup(requests.get(url).text, 'lxml').find_all('script')[3].string
data = soup.split('{return',1)
# print(data)
bitcoin_data = data[1].split(';}var',1)[0] # ok
print(bitcoin_data)