それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

curlコマンドで連番サイトの全データを取得する

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 などなど、コンテツを取得するだけの処理で息切れしてる人を見かけたのでメモです。