ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    CodeIgniterでスクレイピング

    このエントリーを含むはてなブックマーク はてなブックマーク - CodeIgniterでスクレイピング あとで読む
    PHPで様々なクローラーを作ってます。
    CodeIgniterでスクレイピングするのに便利な方法があったので、備忘録としてメモ。

    ●PHP Simple HTML DOM Parser
    スクレイピング用のPHPライブラリがありました。

    ITキヲスク | htmlSQLよりアツい!?jQueryみたいにセレクタでHTMLをparse(解析)する「PHP Simple HTML DOM Parser」

    jQueryみたいにセレクタでHTMLをparseできるお手軽PHPライブラリ「PHP Simple HTML DOM Parser」のご紹介です。



    jQueryみたいに使えます。

    SourceForge.netの「PHP Simple HTML DOM Parserページ」に行き、緑色のDownloadボタンをクリックすれば自動でダウンロードが開始されます。



    さっそくGETしましょう。

    ↓↓↓

    PHP Simple HTML DOM Parser | SourceForge.net

    ●CodeIgniterで使う方法
    「PHP Simple HTML DOM Parser」をCodeIgniterに組み込んで使う方法が紹介されてました。

    CodeIgniterでPHP Simple HTML DOM Parserを使う | 開発業務日誌

    1. PHP Simple HTML DOM Parserをダウンロード

    2. ファイル名の変更
    ダウンロードしたファイルを展開し、ファイルsimple_html_dom.phpの先頭の小文字sを大文字Sに変更
    simple_html_dom.php

    Simple_html_dom.php

    3.クラス名を変更Simple_html_dom.phpファイル内の、2つのクラスの先頭文字を大文字に変更。
    (1) simple_html_dom
      ↓
      Simple_html_dom

    (2) simple_html_dom_node
      ↓
      Simple_html_dom_node

    4. Simple_html_dom.phpを/system/librariesにコピー

    5. コントローラのコンストラクタにてsimple_html_domをロード。
    $this->load->library('simple_html_dom');

    6. 普通に使う
    $html = new Simple_html_dom();
    $html->load_file(‘http://www.google.com’);



    上記手順の4番ですが、
    「/system/libraries」の方ではなく、
    「/application/libraries」の方にコピーしました。
    =systemはフレームワークのコアであるため、上書きアップデートする場合もあることを考慮すると、なるべくいじりたくない。

    ・サンプルコード
    HTML からリンクのタイトルと URL を PHP Simple HTML DOM Parser を使って取得する | ウェブル

    PHP Simple HTML DOM Parser で HTML からリンクを取得することができます。

    $output = <<< DOC
    <ul>
    <li><a href="http://example.com/1">Title1</a></li>
    <li><a href="http://example.com/2">Title2</a></li>
    <li><a href="http://example.com/3">Title3</a></li>
    </ul>
    DOC;

    include('simplehtmldom_1_5/simple_html_dom.php');
    $data = str_get_html($output);
    foreach($data->find('a') as $element){
    echo $element->plaintext;
    echo '<br>';
    echo $element->href;
    echo '<br>';
    }


    こんなかんじで、「plaintext」というプロパティーを参照すると、HTMLタグに囲まれた中身のデータが取り出せます。

    例えば、CodeIgniterで、「http://searchdesk.com/」(文字コード:Shift-JIS)のページから、HTMLの<title>部分を取り出すなら、

    <?php
    $url = "http://searchdesk.com/";
    $html = file_get_contents($url);
    $html = mb_convert_encoding($html, 'utf8', 'sjis-win');

    $this->load->library('simple_html_dom');
    $parser = new Simple_html_dom();

    $parser->load($html);
    $title = $parser->find('title', 0)->plaintext;
    echo $title;
    ?>


    という処理でできました。

    ・Webページの文字コード変換
    ・要素の数や位置によって、findメソッドの引数を変える
    など、状況に合わせて利用すればOKと。

    これで、スクレイピングが簡単にできました。

    ●謝意
    便利なライブラリを作成してくださった方、有益な情報を提供してくださった方、どうもありがとうございます。

    * Website: http://sourceforge.net/projects/simplehtmldom/
    * Acknowledge: Jose Solorzano (https://sourceforge.net/projects/php-html/)
    * Contributions by:
    * Yousuke Kumakura (Attribute filters)
    * Vadim Voituk (Negative indexes supports of "find" method)
    * Antcs (Constructor with automatically load contents either text or file/url)


    関連記事

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    http://hamamuratakuo.blog61.fc2.com/tb.php/817-2b67c595

    FC2Ad