http://www.usamimi.info/~ryouchi/scraping/04.html
このサイトを参考にいろんなサイトのスクレイピングを試していますが
例えば
http://www.himawari.metro.tokyo.jp/qq/qq13tomnlt.asp
のようなサイトですと、スクレイピングができず困っています。
上記サイトは、検索結果等のURLをブックマークして
次に呼び出してもパラメーターエラーになり
毎回トップページからたどっていかないとダメなのですが
こういったサイトについては、どのような方法でスクレイピングを行えば良いのでしょうか?
proxy.phpの使い方で解決するのでしょうか?
アドバイス頂けると嬉しいです。よろしくお願いいたします。
「スクレイピングができない」と書いてるのは、検索結果のページなんかですよね。
http のリクエストは、大雑把に言うと GET と POST の二つがあります。
GET は、検索のキーワードなどのようなパラメータを、URL の一部として指定するタイプ。
URL の後半が ?xxx=aaa&yyy=bbb&zzz=ccc みたいになってるやつです。
POST は、パラメータを URL の一部では無く、別のところ(リクエストのボディ)で指定するタイプ。
URL だけを見ても、どのようなパラメータを渡しているか分かりません。
質問であげられたサイトは、POST でパラメータを渡すタイプです。
参考にしているページにある proxy.php を見ると、POST にも対応しているようです。
<?php ... function http_request($url,$method='GET',$headers='',$post=array(), $redirect_max=HTTP_REQUEST_URL_REDIRECT_MAX) { ...
二番目のパラメータ $method で、デフォルトの値を GET にしているところと、四番目の $post で渡す配列のところを適切に指定してあげる必要があります。
<?php ... function get_html($url){ $rdata = http_request($url); // ★ココ! $data = mb_convert_encoding($rdata['data'],"utf-8","auto"); return ($data); }
と、なっているところを、以下のような感じにしてあげる必要があります。
<?php ... function get_html($url){ $param = array( "xxx" => "aaa", "yyy" => "bbb", "zzz" => "ccc" ); $rdata = http_request($url, 'POST', '', $param); // ★ココ! $data = mb_convert_encoding($rdata['data'],"utf-8","auto"); return ($data); }
どんなパラメータを、どのように設定してあげる必要があるかは、対象のページによって変わるので、解析する必要があります。
コメント(0件)