Python 3.x 使用python3.6在html表中刮取动态数据

Python 3.x 使用python3.6在html表中刮取动态数据,python-3.x,html-table,beautifulsoup,Python 3.x,Html Table,Beautifulsoup,我是一个新的网站废料。我想从这里找到并下载“价格、增量、体积”数据。这些数据在一个表中,分散在期限标签下。我尝试了以下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.3

我是一个新的网站废料。我想从这里找到并下载“价格、增量、体积”数据。这些数据在一个表中,分散在期限标签下。我尝试了以下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])
结果是一个带有字段名的数据帧,但不是我需要的数据。
请告诉我怎么做。谢谢

使用AJAX使用JavaScript呈现网页。您可以使用与AJAX请求相同的API访问数据。您将得到一个JSON响应,您可以解析该响应以获得所需的数据。您可以编辑URL以仅返回您想要的货币,例如:

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())
该文件处理这些数据,您可以阅读这些数据,了解如何解释数据的示例


如果你不想要原始数据,那么就用一种技术来处理它,该技术可以呈现JavaScript生成的网页,请参见我对

的回答。谢谢。但这不是我需要的数据。对于这些汇率API地址,我可以从Chrome-->开发工具-->网络-->XHR获得它们。在这个网页中,除了汇率之外,还有一个更新期权价格的表格。我找不到这些选项价格的API,比如“delta”、“vol”、“skew”和“vega”,它们都是根据评论更新的。我尝试了上面的代码。它响应“无效访问代码”。我检查了js页面,找到了post方法,似乎{data}I post中没有任何错误。我仍在尝试你的可选方法来刮取网页。我在中添加了它所需的授权。我认为此代码不会更改,但你可以从中获得它。现在应该可以了。