2017-01-24 6 views
0

https://www.ssa.gov/OACT/babynames/index.htmlから名前の人気データを取得するPythonスクリプトを作成しようとしています。 year(またはyob)とtop(トップ10,20など)の2つのリクエストパラメータに基づいて、表形式の出力を返すCGIスクリプト/cgi-bin/popularnames.cgiがあります。異なる年のリクエストURLを渡して、同じtopの値(例:10)を渡して、別の年の結果を集計できるようにする必要があります。ただし、リクエストURLが異なるとページが更新されません。 https://www.ssa.gov/cgi-bin/popularnames.cgi?yob=2000&top=10https://www.ssa.gov/cgi-bin/popularnames.cgi?yob=2004&top=10の応答ページは同じです。Pythonリクエスト - CGIスクリプトから毎回新鮮なレスポンスを受け取ることができません

>>> QUERY_URL = 'https://www.ssa.gov/cgi-bin/popularnames.cgi' 
>>> results_page_04 = requests.get(QUERY_URL, params={'year': 2004, 'top': 10}, headers={'Cache-Control': 'no-cache, no 
...: -store, must-revalidate'}).text 
>>> results_page_00 = requests.get(QUERY_URL, params={'year': 2000, 'top': 10}, headers={'Cache-Control': 'no-cache, no 
...: -store, must-revalidate'}).text 

この2つの応答はまったく同じで、実際には応答は奇妙な2015年です。

リクエストを送信する前に設定する必要があるヘッダがありますか(私はrequestsライブラリを使用しています)。

答えて

0

このサイトでは、postではなくgetの検索パラメータを使用しています。クエリパラメータを忘れた場合は、ページ2015が表示されます。

import requests 

url = 'https://www.ssa.gov/cgi-bin/popularnames.cgi' 

for year in range(2000, 2016): 
    data = {'year': year, 'number': 'p', 'top': '10'} 

    response = requests.post(url, data=data) 

    if response.ok: 
     print(response.text) 

ブラウザの開発ツールは、あなたの友人であり、ネットワークタブを調べることで必要なものすべてを手に入れることができます。

+0

よろしくお願いいたします。それは動作するようです。 – srm

関連する問題