我是刚从网站上报废的人。我想从此webpage中找到并下载“价格,价格变动,成交量”数据。这些数据在表中,并分散在男高音的标签下。我尝试了以下python代码:
url = 'https://widget.sentryd.com/widget/#/7D5623FD-E378-411E-A354-C93D10583540' ## 网页版地址
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
page = requests.get(url,headers = headers)
soup = BeautifulSoup(page.text,'lxml')
script = soup.find_all('table')
但是我只得到一个空白列表[]。如何找到数据表并从网站中提取数据?非常感谢。
这是我能找到的最接近的解决方案,而不是我想要的数据。
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://widget.sentryd.com/widget/#/7D5623FD-E378-411E-A354-C93D10583540'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
page = requests.get(url,headers = headers)
soup = BeautifulSoup(page.content,'html.parser')
tables = pd.read_html(soup.text)
print(tables[0])
结果是一个带有字段名称的数据框,但没有我需要的数据。 请告诉我该怎么做。谢谢
答案 0 :(得分:1)
使用AJAX使用JavaScript渲染网页。您可以使用API来访问数据,就像AJAX请求一样。您将获得一个JSON响应,您可以对其进行解析以获取所需的数据。您可以编辑网址以仅返回所需的货币,例如
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD?ts=1533035674098"
这是返回所有货币的代码。
import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
已更新,以回应评论。
您可以像这样获得其余的原始数据。
import requests
import time
s = requests.Session()
s.headers.update({'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
'authorization': 'Basic Y3VycmVuY3lfd2lkZ2V0OmN1cnJlbmN5X3dpZGdldA=='
})
url = "https://widget.sentryd.com/widget/sentry/api/Pricing"
data = {'Type': 'Pricing',
'Products': 'EUR/GBP',
'POSTAccessCode': 'sentryPricingApi',
'POSTAccessPassword': 'sentrypricingapi_213',
'timestamp': str(round(time.time() * 1000))}
r = s.post(url, data=data)
print(r.json())
data['Type']= 'Volatilities'
r = s.post(url, data=data)
print(r.json())
文件https://widget.sentryd.com/widget/currency-widget.min.js处理此数据,您可以阅读该文件以获取有关如何解释数据的示例。
如果您不想要原始数据,请使用可呈现JavaScript生成的网页的技术对其进行抓取,请参见我对Scraping Google Finance (BeautifulSoup)的回答