simple_html_dom の使い方を極める

2014年11月4日更新 view: 83 view
photoBy: http://www.zoomdigital.com.br/wp-content/uploads/…

simple_html_dom とは?

スポンサードリンク

最強phpスクレイピングライブラリ

いろんなのスクレイピングがあるが、これが一番使いやすい。

下準備

文字化け対策

以下は、cakephp用だが、以下のメソッドを作る。
url を 渡せば、そのurlの内容を、htmlテキストを渡せばそのテキストの内容をスクレイピングできる。

・basics.php

/*
    simple_html_dom の文字化け対策用
    url なら urlの先を、テキストならそのままテキストファイルを取得
*/
function simpleHtmlDom($url)
{
    $res = false;
    if (preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $url)) {
        App::uses('HttpSocket','Network/Http');
        $sock = new HttpSocket();
        $text = $sock->get($url);
        
        if($text->code == '200'){
            $con = mb_convert_encoding($text, 'UTF-8', 'auto');
            $res = str_get_html($con);
        }
        
    } else {
        $res = str_get_html($url);
    }
    
    
    return $res;
}

使い方

使い方

まずは html の内容をすべて取得

$shd = simpleHtmlDom('http://www.yahoo.co.jp');

上記を行ってから、htmlの内容の解析をしていきます。

一番最初の img タグの src を取得

/imgpath/logo.png

$shd->find('img', 0)->src

すべての img タグを 順に取得

foreach($shd->find('img') as $key => $v){
    $shd->find('img',$key)->src;//logo.png など img の src 要素を取得
}

要素を取得

echo $shd->find('div',0)->outertext; // Returns: "<div>foo <b>bar</b></div>"
echo $shd->find('div',0)->innertext; // Returns: "foo <b>bar</b>"
echo $shd->find('div',0)->plaintext; // Returns: "foo bar"

子要素を取得

$body に適当なhtml を入れる。
ダミーで #article で囲む。
で、html->find で 直下の子要素を取得。
これを応用することで、することで、記事中にランダムにadsense を挿入することができる。

$body = '<div id="article">' .$body. '</div>';

        $tmp = str_get_html($body);
        $e = $tmp->find( "#article > *");

        $max = count($e)-2;


        $ad_no = rand(1,$max);


        $res = '';
        foreach ($e as $key => $v) {

            if($key == $ad_no){
                $v->outertext .= $adsense[0];
            }

            $res .= $v->outertext;

        }

要素の中身を変更

foreach($shd->find('img') as $key => $v){
    $shd->find('img',$key)->src;//logo.png など img の src 要素を取得
    $shd->find('img',$key)->outertext = '<a href="#"><img src="'.$shd->find('img',$key)->src.'" /></a>';//img タグに a href # をつける
}

で、変更後の内容を表示するには

echo $shd;

改行コードがおかしいんだけど

preタグが入ってると場合、改行コードがおかしくなる。

$shd = str_get_html($body, true,true,DEFAULT_TARGET_CHARSET,false);

とすればOK!

スポンサードリンク

関連記事

関連カテゴリ

コロ助

web関連の記事や制作系の記事をどんどんまとめていきます。 宜しくお願いします!

ピックアップ

パソコン・ソフトウェア ランキング

9月23日 ( 日 ) にアクセスが多かった記事はこちら!