<p>你不能盲目地发送有效载荷到一些网站,并期待一个好的结果。首先,查看<code>form</code>元素的源代码。我去掉了一些不重要的部分:</p>
<pre><code><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>
</code></pre>
<p>首先,从<code>form</code>元素的<code>method</code>属性可以看出,必须使用GET方法而不是POST来发送有效负载。第二,从<code>action</code>属性中,您还可以看到应该将有效负载发送到此特定URL:</p>
<pre><code>https://www.wunderground.com/cgi-bin/findweather/getForecast
</code></pre>
<p>有效负载本身不仅仅是要发送的值。在许多情况下,必须发送附加值才能使web服务器正确响应。通常最好要么发送所有内容(基本上是每个<code>name</code>属性),要么检查网站实际发送的内容。你知道吗</p>
<p>此代码适用于我:</p>
<pre><code>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)
</code></pre>