ある特定のサイトでスクレイピングできないのですが、どうすれば出来ますか?

http://www.usamimi.info/~ryouchi/scraping/04.html
このサイトを参考にいろんなサイトのスクレイピングを試していますが
例えば
http://www.himawari.metro.tokyo.jp/qq/qq13tomnlt.asp
のようなサイトですと、スクレイピングができず困っています。

上記サイトは、検索結果等のURLをブックマークして
次に呼び出してもパラメーターエラーになり
毎回トップページからたどっていかないとダメなのですが
こういったサイトについては、どのような方法でスクレイピングを行えば良いのでしょうか?
proxy.phpの使い方で解決するのでしょうか?
アドバイス頂けると嬉しいです。よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/06/27 18:50:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント100pt

「スクレイピングができない」と書いてるのは、検索結果のページなんかですよね。


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);  
}  

どんなパラメータを、どのように設定してあげる必要があるかは、対象のページによって変わるので、解析する必要があります。

id:oil999 No.2

回答回数1728ベストアンサー獲得回数320

ポイント100pt

「スクレイピングができず困っています」には、POSTでパラメータを渡します。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません