Mechanizeとか<?php file_get_contents() ;?>で息切れしている人たちに捧げる。
curl には連番を処理する機能があって。
連番(sequence)はこれでまとめ得取得できちゃう。
curl 'http://www.jr-odekake.net/eki/top.php?id=0610[001-999]'
これで
http://www.jr-odekake.net/eki/top.php?id=0610001 http://www.jr-odekake.net/eki/top.php?id=0610002 ... http://www.jr-odekake.net/eki/top.php?id=0610998 http://www.jr-odekake.net/eki/top.php?id=0610999
までまとめて、ファイルにアクセスできる。
- [000-999] で0始まり(0 padding )な連番
- [1-99] で普通の数字で作る連番
これでまとめてアクセスできるよ・
でも、連番って組合せて役に立つ
でも、連番って組合せて初めて役に立つよね。
- 連番のファイルを保存する
- 連番のデータのHEADリクエストで、存在チェック
- 連番にデータを投げてみる
などなど。連番にアクセスしただけでは役に立たないよね。
連番ファイルを連番ファイルで保存する
連番をそのままファイルで保存するには
curl http://www.jr-odekake.net/eki/top.php?id=0610[001-999] -o "#1.html"
これで、取得した連番をファイル名に保存できる。
画像やHTMLのまとめて保存できる。保存した後に、HTML解析するなり、SQLに放り込むなり、ページを処理することが出来る。
連番のURLの存在チェックをする
全部保存しても勿体ないので、事前にチェックをする
curl --request HEAD \ -sw '{ "http_code": "%{http_code}" , "url" : "%{url_effective}" },\n' \ http://www.jr-odekake.net/eki/top.php?id=0610[001-999]
とりあえず、これを書けば、連番ファイルについて、それぞれのHTTP_STATUS_CODEを書くことが出来る
あとは、これを json ⇛ map ⇛ select ?
いいえ、 sort , grep , cut , awk でコマンド処理 しましょうね
curl --request HEAD -sw '"%{http_code}" "%{url_effective}"\n' \ http://www.jr-odekake.net/eki/top.php?id=0610[001-999] \ | grep ^200 \ | awk '{print $2}' > url.list
さらにこれを
curl < url.list
とすればいいわけですね。
データを回収するのにfile_get_contentsや、mechanize や LWP などなど、コンテツを取得するだけの処理で息切れしてる人を見かけたのでメモです。