如何使用Python从.aspx页检索数据?

时间:2019-08-19 01:09:10

标签: python json pandas python-requests

我希望从.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的检查表明参数没有正确使用,因为仅出现输入查询之前的网页内容。

1 个答案:

答案 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.