

googleの画像検索結果のスクレイピングがうまくいきません。  
画像が動的に出力されているからでしょうか？  
htmlsimpledomを使用しています。  
以下がコードになります。

[code]

        include 'simple_html_dom.php';
    
        $arrContextOptions=array(
        "ssl"=>array(
            "verify_peer"=>false,
            "verify_peer_name"=>false,
        ),
    );
    
    
            $query = "ルンバ";
            $html2 = file_get_html("https://www.google.co.jp/search?q=". $query . "&tbm=isch", false, stream_context_create($arrContextOptions));
            $html2 = mb_convert_encoding($html2, 'utf8', 'auto');
            $dom2 = str_get_html($html2);
            //get category
            $dataSrc='data-src';
            $img = $dom2->find('img.rg_i',0);
            var_dump($img);
    
[/code]

詳しい方、ご教示下さい。宜しくお願い致します。


CC BY-SA 3.0
2016-02-20T08:15:00.800
22307
2016-04-20T17:10:47.013
8619
question
php
googleの画像検索結果のスクレイピング


  * **`file_get_html()`の結果は文字列ではありません**

`mb_convert_encoding()` は **文字列** のエンコーディングを変換する関数ですが、 `simple_html_dom.php`
によって提供される `file_get_html()` は文字列ではなく独自のオブジェクトを返すため、`mb_convert_enconding()`
に渡すことはできず、エラーが出ています。URLから文字列で取得するときにはPHPの標準関数である `file_get_contents()` を使います。

  * **Googleの検索ページはUserAgentによってレスポンスのHTMLを変えています**

詳細は省きますが、UserAgentの有無によってHTMLが変化しているようです。そのためブラウザで見たDOMツリーと異なっているのでしょう。UserAgentを指定してアクセスするか、もしくはUserAgentなしで得られるHTMLに合わせた解析処理を書く必要があるかと思います。

PHPからエラーや警告が出ていないか、取得したHTMLをそのまま文字列で出力してみて狙い通りのものかどうか、順番に確認していくとよいのではないでしょうか。


CC BY-SA 3.0
2016-02-20T13:12:51.470
22316
2016-02-20T13:12:51.470
8000
22307
answer