私はちょうどPythonのイントロコースを終え、小さなプロジェクトに取り組んでいます。目標は単にWebサイトからデータを抽出することです。リクエストライブラリの仕組みを学びたいので、SeleniumやMechanizeなどのライブラリの使用は避けています。以下は私のコードです。Pythonで投稿する
s = requests.Session()
url = 'https://services2.hdb.gov.sg/webapp/BB33RTIS/BB33SSearchWidget'
data = {'FLAT_TYPE':'03',
'NME_NEWTOWN':'AMK+++++Ang+Mo+Kio',
'NME_STREET':'',
'NUM_BLK_FROM':'',
'NUM_BLK_TO':'',
'dteRange':'12',
'DTE_APPROVAL_FROM':'Dec+2015',
'DTE_APPROVAL_TO':'Dec+2017+',
'AMT_RESALE_PRICE_FROM':'',
'AMT_RESALE_PRICE_TO':'',
'Process':'continue',
'null':'null'
}
userAgent = {'User-Agent':'Mozilla/5.0','Referer':'https://services2.hdb.gov.sg/webapp/BB33RTIS/BB33PReslTrans.jsp'}
page = s.post(url,data=data,headers=userAgent).content
print(page)
s.close()
しかし、これは私の代わりにフォームのコードを与えるようです。この結果は、データが含まれていなくても変更されないため、データが正しくポストされていないと見なします。調べると、ページにクエリ文字列パラメータがないことがわかりましたが、代わりに 'フォームデータ'と呼ばれるものがあります。私はどのようにこれにパラメータを投稿するか分からない。誰かが私を正しい方向に向けるのに十分な親切な人ですか?
Chrome/FirefoxでDevToolを使用して、ブラウザでページを使用するときにブラウザでリクエストを表示します。たぶんフォームやクッキーに他のヘッダーや隠しフィールドが必要な場合や、Cookieや時間/タイムスタンプを使用して別のリクエストで異なるフィールドに値が入力されるフィールドがあります。 – furas
セッションを使用する場合は、最初にgey cookie(セッションID)と隠されたフィールドの値を取得して、すべてのリクエストで値を変更できます。 – furas