我希望从.aspx网站访问数据,该网站具有许多需要输入参数的字段。数据将在Pandas中进一步分析。我显然在这里缺少一些步骤,因此将不胜感激。该网站为https://www.cocorahs.org/ViewData/StationPrecipSummary.aspx
我正在尝试使用Python库Requests,获取json并将其转换为DataFrame的简单方法。
parameters = {'Station 1':'MD-BL-13','Start Date':'8/01/2019','End Date':'08/10/2017'}
response = requests.get('https://www.cocorahs.org/ViewData/StationPrecipSummary.aspx', params=parameters)
data = response.json()
pd.read_json(data)
我想获得一个带有'Date'和'Precip mm'列的DataFrame,其中包含来自请求时间段的数据。对response.content的检查表明参数没有正确使用,因为仅出现输入查询之前的网页内容。
答案 0 :(得分:1)
我发现ASP.NET站点很难应付,但这是使用pandas和request-html的解决方案。
from requests_html import HTMLSession
import pandas as pd
with HTMLSession() as s:
r = s.get('https://www.cocorahs.org/ViewData/StationPrecipSummary.aspx')
hiddens = r.html.find('input[name=__VIEWSTATE]', first=True).attrs.get('value')
payload = {
'__EVENTTARGET': '',
'_VIEWSTATE': hiddens,
'obsSwitcher:ddlObsUnits': 'usunits',
'tbStation1': 'MD-BL-13',
'ucDateRangeFilter:dcStartDate': '8/1/2019',
'ucDateRangeFilter_dcStartDate_p': '2019-8-1-0-0-0-0',
'ucDateRangeFilter:dcEndDate': '8/10/2019',
'ucDateRangeFilter_dcEndDate_p': '2019-8-10-0-0-0-0',
'btnSubmit': 'Get Summary'
}
r = s.post('https://www.cocorahs.org/ViewData/StationPrecipSummary.aspx', data=payload)
table = r.html.find('table.Grid', first=True)
df = pd.read_html(table.html, header=0)[0]
print(df)
Date Precip in.
0 08/01/2019 0.00
1 08/02/2019 0.00
2 08/03/2019 0.00
3 08/04/2019 0.00
4 08/05/2019 0.00
5 08/06/2019 0.00
6 08/07/2019 T
7 08/08/2019 1.73
8 08/09/2019 --
9 08/10/2019 --
10 Totals : 1.73 in.