【Laravel】スクレイピングする方法 俺用メモ!【PHP Simple HTML DOM Parser】

どうもきよです!

久しぶりの投稿となりましたが、

今回はLaravelでのスクレイピングの方法についてメモしていこうと思います。

使い方、導入方法はシンプルなのでぜひ用法用量を守ってご利用ください!

・今回のバージョン

laravel 6.5

PHP 7.4

・導入方法

– コンソールから下記実行

composer require kub-at/php-simple-html-dom-parser

・使用方法

– ファイルでuseする

use KubAT\PhpSimple\HtmlDomParser;

インスタンス作成

– プログラム上などでHTMLを作成した場合など

$str = '<html><head></head><body><h1>hoge</h1></body></html>';
$dom = HtmlDomParser::str_get_html($str);

– 外部サイトや自サーバーファイルを参照する場合はこっち

$url = 'http://hogehoge';// 自サーバー内のファイルならPathでもOK
$dom = HtmlDomParser::file_get_html($url);

※このインスタンスで操作を行う

※内部的にはfile_get_contentsしてる

※デフォルトで600KBまで

Classを検索

$classes = $dom->find('.hogehoge');
foreach ($classes as $class) {
    ....
}

※配列でnodeが帰ってくる

※Classの場合は「.」を先頭につける

IDで検索

$ids = $dom->find('#hogehoge');
foreach ($ids as $id) {
    ....
}

※配列でnodeが帰ってくる

※IDの場合は「#」を先頭につける

タグ名で検索

$tags = $dom->find('div');
foreach ($tags as $tag) {
    ....
}

※配列でnodeが帰ってくる

nodeの状態を確認する

$ids = $dom->find('#hogehoge');
foreach ($ids as $id) {
    var_dump($id->dump());exit;
}

※#hogehoge配下のnodeの状態をデバッグできる

参照先を親nodeに移す

$ids = $dom->find('#hogehoge');
foreach ($ids as $id) {
    $parent = $id->parent();
}

子node全てを取得する

$ids = $dom->find('#hogehoge');
foreach ($ids as $id) {
    $children = $id->children();
    foreach ($children as $child) {
    }
}

※配列でnodeが帰ってくる

特定の子nodeを取得する

$ids = $dom->find('#hogehoge');
foreach ($ids as $id) {
    $index = 2;
    $child = $id->children($index);
}

※index = 2の子nodeを取得できる

最初の子nodeを取得する

$ids = $dom->find('#hogehoge');
foreach ($ids as $id) {
    $child = $id->first_child();
}

※子が存在する場合は、最初の子nodeを返す

※子が存在しない場合はnull

最後の子nodeを取得する

$ids = $dom->find('#hogehoge');
foreach ($ids as $id) {
    $child = $id->last_child();
}

※子が存在する場合は、最後の子nodeを返す

※子が存在しない場合はnull

同じ階層の次のnodeを取得する

$classes = $dom->find('.hogehoge');
foreach ($classes as $class) {
    $next = $id->next_sibling();
}

※次のnodeが存在する場合は、次のnodeを返す

※次のnodeが存在しない場合はnull

同じ階層の前のnodeを取得する

$classes = $dom->find('.hogehoge');
foreach ($classes as $class) {
    $prev = $id->prev_sibling();
}

※前のnodeが存在する場合は、前のnodeを返す

※前のnodeが存在しない場合はnull

カレントnode以下のClassを取得する

$ids = $dom->find('#hogehoge');
foreach ($ids as $id) {
    $classes = $id->find('.hogehoge');
    foreach ($classes as $class) {
        $class->text();
    }
}

node内のテキストを取得する

$ids = $dom->find('#hogehoge');
foreach ($ids as $id) {
    $text = $id->text();
}

※スペースが含まれることがあるので注意

とりあえず、この辺にしておきます。

その他にも、取得したhtmlをカスタマイズすることも可能ですし、

そのカスタマイズしたhtmlを保存することも可能なので、

必要であれば調べてみてください!

ライブラリのソースもシンプルで読みやすいので、

暇でしたらぜひ!

以上、よろしくお願いいたします。

スポンサーリンク




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク




%d人のブロガーが「いいね」をつけました。