poorな環境でのスクレイピングのやり方(あるいはshell script mechanize)
wgetぐらいしか無いようなpoorな場所で、WebページスクレイピングをShell Scriptで書いてみる。
キモはwgetのオプション。 重要なのは下記の3つを付与すること。
--save-cookies=<Cookieファイル名>
<cookieファイル名>にCookieを保存してくれる。--load-cookies=<Cookieファイル名>
<cookieファイル名>があればCookieを読んで、リクエスト時に送信してくれる。--keep-session-cookies
TTLがSessionのCookieも保存してくれる。
shで書くときには下記のようにaliasを切って使う事が多い。
alias mywget="wget -q -O - --save-cookies=${cookie_file} --load-cookies=${cookie_file} --keep-session-cookies"
あとは
# login 時のPOST mywget --post-data "user_id=${user_id}&password=${password}" http://www.example.com/login > /dev/null # データのGET mywget http://www.example.com/some/list.csv > my_list.csv
のようにリクエストを五月雨で打っていけば、大抵のWebサイトなら読み書き出来る。
JSONで返ってくるような場合はjq
を、XMLで返ってくるような場合はxmllint
でゴニョゴニョやるのが良さそう。
特にjq
はバイナリ一本で動くのでポータブルでよろしい。