PHPで簡単にスクレイピングする方法【DOMDocument・DOMXpath】

PHP

こんにちは、かじです。

今回はPHPでスクレイピングする方法をまとめていきたいと思います。

1.PHPでスクレイピングをする方法の種類

PHPでスクレイピングを行う場合、下記3通りのスクレイピング方法があります。

1.PHPの備え付けのDOMDocumentクラスとDOMXpathクラスを使用する

2.ライブラリPHPQueryをダウンロードして使用する

3.ライブラリPHP Simple HTML DOM Parserを使用する

以前、僕は2のPHPQueryを使用していたのですが、PHPに備え付けられているクラスライブラリがあるのなら、ライブラリをダウンロードしたり、管理する手間が省けるため、そちらの方がいいと考えたため、今回は、DOMDocumentを使用したスクレイピング方法を紹介します。

2.実際に使ってみる

<?php
// ①
$dom = new DOMDocument('1.0', 'UTF-8');
// ②
$html = file_get_contents("https://www.yahoo.co.jp/");
// ③
$dom->loadHTML($html);
// ④
$xpath = new DOMXpath($dom);

// ⑤
foreach($xpath->query('//div') as $node){
     var_dump($node->textContent);
}
// ⑥
$xpath->query('//div[id="wrapper"]/div[id="ContentWrapper"]/');

①DOMDocumentインスタンスの生成をします。引数にはドキュメントの引数と文字コードを渡します。

②ではWEBサイトのHTML情報を取得します。

③ロードしたHTMLをパースします。

④DOMXpathインスタンスの生成を行います。パースされた状態のDOMDocumentインスタンスを引数として渡します。

⑤抽出したい要素をHTML要素を指定して、テキストを抽出します。ただ、上記のコードの例だと全てのdiv要素のテキスト内容を抽出してしまうので、必要な情報以外も抽出されてしまいます。そういう場合は⑥のようにHTML要素の親子関係で絞ったり、idやclassで絞ることが可能です。

3.警告が出た場合

ここで一つ謝罪すべきことがあります。先ほどのコードでは、③の前後でwarningが大量に出るということです。

Warning: DOMDocument::loadHTML(): Tag header invalid in Entity, line: 27 in 」という警告文がサイトによっては大量に出てくるかと思います。

なので下記のようにコードを追加してエラーを出さないようにします。

// ③
libxml_use_internal_errors( true ); // 追加
$dom->loadHTML($html);
libxml_clear_errors();// 追加

これで警告文を非表示にすることになります。

これでPHPでスクレイピングを行うことができるようになりました。今回の内容を活かして、さまざまなことを試してプログラミングを楽しんでもらえたら幸いです。

今回はここまでになります。最後まで閲覧くださりありがとうございました。

~参考サイト~

PHP: DOMDocument - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.
PHP: DOMXPath - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.
Warning: DOMDocument::loadHTML() を抑制する - Qiita
HTML5 な文書を DOMDocument::loadHTML 使って読み込ませると Warning が出る。<?php$html = '<!doctype html><html><body>…

画像出典元

Web illustrations by Storyset

タイトルとURLをコピーしました