使用Python(输入日期)刮取动态网页

2024-10-01 04:57:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

刮取的数据可能是格式化的,也可能不是(它在单独的td标签上),但我可以在下载后重新格式化。 到目前为止,我阅读了有关selenium的选项,但我没有安装Chrome,所以我正在寻找其他方法。 谢谢你的帮助


Tags: 数据方法httpscomvalue网站wwwnn
1条回答
网友
1楼 · 发布于 2024-10-01 04:57:03

此页面使用JavaScript/AJAXXHR

使用Firefox中的DevTool(选项卡:Network,过滤器: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

相关问题 更多 >