次のようなオンライン計算機からデータを取得しようとしています。
https://srv111.services.gc.ca/INT_02.aspx
複数ページのフォームに記入する必要があります。
これを行うためにpython Requestライブラリを使用しようとしていますが、うまくいきません。私がそれを理解する方法から、
import requests
s = requests.Session()
次に、各ページに目を通し、
s.get(url1)
r2 = s.post(url2, data=payload) #payload is form data created by looking at page source
...
しかし、うまくいかないようです。私が
print r2.text
次のページを取得する必要がありますが、同じページを取得します。私はこのことにかなり慣れていません。誰かが私の間違いを指摘してください。ありがとうございます!
編集:ここにコードがあります:
import requests
import codecs
url1='https://srv111.services.gc.ca/INT_01.aspx?lang=e'
url2='https://srv111.services.gc.ca/INT_02.aspx'
url3='https://srv111.services.gc.ca/OAS_01.aspx'
url4='https://srv111.services.gc.ca/OAS65_01.aspx'
url5='https://srv111.services.gc.ca/OAS_11.aspx'
payload2={'ctl00$ContentPlaceHolder1$ddlMonth':'1', 'ctl00$ContentPlaceHolder1$txtYear':'1987', 'ctl00$ContentPlaceHolder1$lbGender':'1', 'ctl00$ContentPlaceHolder1$btnNext': 'Next'}
s = requests.Session()
r1 = s.get(url1)
c = {'ASP.NET_SessionId': r1.cookies['ASP.NET_SessionId']}
r2 = s.post(url2, data=payload2, cookies=c)
payload3 = {'ctl00$ContentPlaceHolder1$btnNextPrevious2$btnNext':'Next'}
r3 = s.post(url3, data=payload3, cookies=c)
payload4 = {'ctl00$ContentPlaceHolder1$lbYesNo':'-1'}
r4 = s.post(url4, data=payload4)
r5 = s.get(url5)
with codecs.open('result.html','w','utf-8') as f:
f.write(r2.text)