PHPでウェブスクレイピング

他サイトから取得したHTMLソースから目的のテキストなどを取り出したい時、ソースを文字列として扱うよりもDOMとして操作すると簡単に取り出せる事がわかりました。

HTMLソースの取得は別記事(PHPでサイトのソースを取得する)を参照してもらうことにして、スクレイピングについて書いていきます。

サンプルコード

例えば、ページのタイトルを取得する場合

$html_sourceにHTMLソースが入っているものとします。

解説

phpQueryの読み込み

スクレイピングするには、「phpQuery」というライブラリを使います。
下記よりダウンロードしてrequire_onceなどで読み込みます。

ソースをDOM操作可能な形に変換

HTMLソースを「phpQuery」に渡して、変換したものを受け取っています。

スクレイピング

変換後は、要素を配列のように扱うことができます。
サンプルコードでは、title要素を取得しています。
text()は、その要素内にあるテキストを取得する場合に使用します。

要素の指定方法

ID名で抜き出し(#menuというIDの場合)

class名で抜き出し(.mainというclassの場合)

同じclass名が複数ある場合

対象が複数ある場合はすべて取得してしまうので、class名の後に:eq(0)とすると何番目のclassか指定できます。ちなみに1番目が0、2番目が1となります。

リンク先のアドレスの取得

または

画像のアドレスの取得

複数の要素を指定

imga要素の両方

子要素の指定

ul要素の中のli要素

その他

他にも様々な指定方法があるようです。

公式サイトのオプション一覧
https://code.google.com/archive/p/phpquery/wikis/Selectors.wiki