PHP Simple HTML DOM Parserを使用したスクレイピング方法
2024/03/13
PHPでスクレイピングする際、preg_match_all等を用いて必要なデータを取得していたが、ソースコードを後から見ると分かりづらい。もうちょっとスマートな方法は無いかと探してみたところ「PHP Simple HTML DOM Parser」というライブラリが導入しやすく使いやすかった。以下に使用方法をメモ。
目次
ライブラリの用意
以下からダウンロードし適当なディレクトリにアップロードする。
http://sourceforge.net/projects/simplehtmldom/
リファレンス
公式サイトは以下。
https://simplehtmldom.sourceforge.io/docs/1.9/index.html
公式じゃないっぽいけど日本語で分かりやすいのは以下。
https://so-zou.jp/web-app/tech/programming/php/library/simplehtmldom/
ソースコード
基本的な使い方
require_once('./simple_html_dom.php');
//スクレイピング対象のURL
$url = 'https://taitan916.info/blog/';
//ページ取得
$page = file_get_html($url);
//titleタグの中身を取得
foreach( $page->find('title') as $elem ){
var_dump($elem->plaintext);
}
//OGPタグのog:descriptionのcontentを取得
foreach( $page->find('meta[property="og:description"]') as $elem ){
var_dump($elem->content);
}
//メモリのクリーンアップ
$page->clear();
findの中身はjqueryのセレクタのようにidだと「#id」で、classだと「.class」のように指定できる。
「file_get_contents(): SSL operation failed」エラーが発生する場合
以下のように引数を指定する。
$context = stream_context_create(
array(
'http' => array(
'follow_location' => false
),
'ssl' => array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
)
);
$page = file_get_html($url, 0, $context);
data要素を取得したい場合
例えば<span id="test" data-price="100" data-count="50">みたいな要素からdata-priceとdata-countの値を取得したい場合は以下のように取得する。
foreach( $page->find('#test') as $elem ){
$elem_attr = $elem->attr;
var_dump( $elem_attr['data-price'] );
var_dump( $elem_attr['data-count'] );
}
所感
本ライブラリは非常に簡単で使いやすいもののページ取得時はcurlではなくfile_get_contentsを用いているため以前にメモしたhosts設定を行った上でのアクセスはできないっぽい。
こちらの方法でcurlで動くように書き換えればいけるかも。
関連記事
-
-
PHPでルーティング用ライブラリ「AltoRouter」の利用方法
PHPフレームワークのCodeIgniterを勉強していた際にルーティング機能が ...
-
-
PHPで「ramsey/uuid」ライブラリを用いてUUIDを生成する方法
PHPでUUID(Universally Unique Identifier)を ...
-
-
PHPでエラーメッセージを見やすくするwhoopsの利用方法
PHPのエラーメッセージが見づらい。これはこういうもの、と諦めていたがCodei ...
-
-
PHPのバリエーションライブラリ「Valitron」の導入及び利用方法
フォーム等の入力内容チェックをPHP側で行う際、現状は素のPHPで書いているけど ...
-
-
MySQLのバックアップファイルを簡単に作成できるライブラリ「myphp-backup」の利用方法
MySQLのバックアップを取る際にadminerとかから手動で対応するのではなく ...