恥ずかしげもなく技術ブログ

プログラミング等について書いていきます.

pythonでPOSTリクエストを解析したり投げたりする

@author poifull10

あるサイトのページをクロールしたい場合,もしそのページがpostリクエストに対応していて,かつその処理結果をURLでは区別できない場合にはpostリクエストを調べる必要がある.何が言いたいのかというと,例えば

 

1search.php というページがあって,これにブラウザでフォームを入力し送信すると 検索結果result.phpが帰ってくるとする.このURLに例えば result.php?p=1&...とか検索条件が入っていれば良いのだが,全て同じURLで,result.phpというファイルで帰ってくる場合もある.このとき,pythonでデータを全てクロールするにはどうしたものかと悩んでいた.

 

色々調べた結果,フォームの内容はPOSTリクエストという形式でサーバーに送信されるようなので,POSTリクエストの内容を調べてその結果をrequestsモジュールにある

requests.postメソッドで送信すれば欲しいデータがかえってくることがわかった.

 

以下はその手順.

 

1.ブラウザで検索結果のページを開き,F12を押す.

(chromeの場合は右クリック,「要素の検証」でもいい)

2.Networkタブのresult.phpをクリック.

3.右にあるタブHeadersをクリック.

4.From Dataのところにある各変数の値がブラウザで送ったフォームの変数とデータとなる.

 

これを見た上で,urlがresult.phpにフォームデータp:1と送られていれば,pythonでは以下の様に書くことで1p目のデータをクロールできたことになる.

 

import requests

# 送信したいデータ

formData = {'p'=1}

# 送信先

url = 'result.php'

# 返されるデータ

res = requests.post(url, formData)