-2

我试图找到一种方法来迭代很长一段时间的日期。该网站是: https ://www.nnbulgaria.com/life-insurance/insurance-plans/investment-insurance-nn-pro/value-of-investment-unit ,其中有一个表格,其中包含每个日期的特定值(从 2017 年 6 月 1 日开始,格式为 MM/DD/YYYY)。使用不同的日期输入,表格会发生变化,因此我需要能够遍历日期或日期范围,然后提取表格数据。 (还有一个所有值的图表,但我在页面源中找不到动态内容)

抓取的数据可能已格式化或未格式化(位于单独的 td 标签上),但下载后我可以对其进行整形。到目前为止,我阅读了有关 selenium 的选项,但我没有安装 Chrome,所以我正在寻找其他方法。帮助表示赞赏。

4

1 回答 1

1

本页使用JavaScript/ AJAX( XHR)

使用DevToolin Chromeof Firefox(tab: Network, filter: XHR) 您可以查看来自JavaScript服务器的所有请求以及响应中的所有数据。

这样你可以看到它从 url 读取一些数据:

https://www.nnbulgaria.com/Orchard.Nn/public/chartsUVData?chart-startdate=2004-06-01&chart-enddate=2020-04-23&value-per-share-type=LiPro

它获取JSON数据,您可以轻松地将其转换为 Python 字典。

在 url 你可以看到日期chart-startdate=enddate=所以如果你改变日期,那么你应该得到不同的数据——你不需要为此使用POST表单。

而且它不需要使用Selenium

import requests

url = 'https://www.nnbulgaria.com/Orchard.Nn/public/chartsUVData'

params = {
    'chart-startdate': '2004-06-01',
    'chart-enddate': '2020-04-23',
    'value-per-share-type': 'LiPro',
}

r = requests.get(url, params=params)
data = r.json()

print(data.keys())

for label, lowrisk, balanced in zip(data['labels'], data['dataLowRisk'], data['dataBalanced']):
    print(label, lowrisk, balanced)

结果

dict_keys(['labels', 'dataLowRisk', 'dataBalanced', 'dataAggressive', 'dataCommodities', 'dataMoneyMarket', 'dataUSEquities', 'dataGermanEquities', 'dataTechnologyCompaniesEquities'])

02.06.2017 1.0 0.99434
08.06.2017 0.9999 0.99387
14.06.2017 1.00092 0.99564
20.06.2017 1.0059 1.00039
26.06.2017 1.00375 0.99676
30.06.2017 0.99521 0.98354
06.07.2017 0.9932 0.98518
12.07.2017 0.99384 0.98384
18.07.2017 1.00056 0.9944
24.07.2017 0.99827 0.99075
于 2020-04-22T22:38:19.493 回答