如何使用 Python 在 Wunderground History 页面中提交表单

风景

我想做以下事情。

1) 前往https://www.wunderground.com/history

2) 提交具有以下值的表单:

位置 = '加利福尼亚州洛杉矶'

月 = '十一月'

日 = '02'

年 = '2017'

3) 检索响应并保存到文件

这是我目前所拥有的,但不起作用:

import requests
url = 'https://www.wunderground.com/history'
payload = {'code': 'Los Angeles, CA', 'month': 'November', 'day': '2', 'year':'2017'}
r = requests.post(url, params=payload)

with open('test.html', 'w') as f:
    f.write(r.text)

我没有得到预期的响应,也不确定我是否正确使用了请求。

我知道 wunderground 有一个 API,但目前不想使用它。

test.html 的内容基本是原始页面,没有历史数据。

我期待这个页面:

https://www.wunderground.com/history/airport/KCQT/2017/11/2/DailyHistory.html?req_city=Los+Angeles&req_state=CA&req_statename=California&reqdb.zip=90012&reqdb.magic=1&req9999mo=9

节叶小门

您不能盲目地向某些网站发送有效负载并期望获得好的结果。首先,查看form元素的源代码我删除了一些不重要的部分:

<form action="/cgi-bin/findweather/getForecast" method="get" id="trip">
    <input type="hidden" value="query" name="airportorwmo" />
    <input type="hidden" value="DailyHistory" name="historytype" />
    <input type="hidden" value="/history/index.html" name="backurl" />
    <input type="text" value="" name="code" id="histSearch" />

    <select class="month" name="month">
        <option  value="1">January</option>
        <option  value="2">February</option>
        ...
        <option  value="12">December</option>
    </select>

    <select class="day" name="day">
        <option>1</option>
        <option>2</option>
        ...
        <option>31</option>
    </select>

    <select class="year" name="year">
        <option>2018</option>
        <option>2017</option>
        ...
        <option>1945</option>
    </select>

    <input type="submit" value="Submit" class="button radius" />
</form>

首先,从元素method属性form可以看出,必须使用 GET 方法,而不是 POST 来发送有效负载。其次,从action属性中您还可以看到您应该将该有效负载发送到此特定 URL:

https://www.wunderground.com/cgi-bin/findweather/getForecast

有效载荷本身不仅仅是您要发送的值。在许多情况下,为了让 Web 服务器正确响应,必须发送额外的值。通常最好要么发送所有内容(基本上是每个name属性),要么检查网站实际发送的内容。

这段代码对我有用:

import requests

URL = 'https://www.wunderground.com/cgi-bin/findweather/getForecast'
CODE = 'Los Angeles, CA'
DAY = 2
MONTH = 11
YEAR = 2017

params = {
    'airportorwmo': 'query',
    'historytype':  'DailyHistory',
    'backurl':      '/history/index.html',
    'code':         CODE,
    'day':          DAY,
    'month':        MONTH,
    'year':         YEAR,
    }

r = requests.get(URL, params=params)
print(r.text)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用python清理没有API的Wunderground

如何从其他页面在moodle中提交表单?

在Laravel中提交表单后如何重定向确认页面?

在 Django 中提交表单后,如何使用对象 ID 重定向到新页面?

如何防止表单在同一HTML页面中提交时重置其他表单

Python从Wunderground JSON API获取单日天气预报

如何使用python填写和提交表单

如何在不重新加载页面的情况下在Laravel中提交PUT方法表单?

在Apps脚本中提交表单后如何重定向到新的html页面

在表单Selenium + Python中提交按钮

如何在WordPress的同一页面中提交表单数据而无需重新加载页面?

Wunderground PHP

如何更改React中提交表单的状态?

如何在React Native中提交表单

如何在php类中提交表单

如何在Javascript中提交表单

如何不在jQuery中提交表单

使用Requests Python提交表单

使用HTML在MVC中提交表单

使用onsubmit在JS中提交表单

如何使用history.push()函数重定向页面

我如何重定向在 reactjs 中提交表单并使用 formik

如何检查在同一jsp页面中提交的jsp表单请求?(enctype =“ multipart / form-data”)

在flask中提交后如何在同一页面上打印html表单详细信息?

使用链接而不是提交输入来在JQuery中提交表单

在Vue中提交表单。如何引用表单元素?

在jsp中提交子表单后如何返回父表单

如何在python中使用硒提交此表单?

如何阻止页面在提交表单时刷新?