PHPでWebスクレイピングする方法って?

プログラミング
この記事では、PHPを使ってWebスクレイピングをする方法について紹介しています。PHPはWebスクレイピングをするのに優れていて、CSVや画像、Webサイトの情報など色々な情報を抜き出すことが可能です。PHPでWebスクレイピングするなら、idやclassなどの指定をすることによって、ピンポイント情報を抜き出すことが可能になるので、特定のデータを抽出したい時にぴったりです。
PHPでWebスクレイピングする方法って?

PHP学習初心者の方で、Webスクレイピングにチャレンジしてみたい!と考えている方はいませんか。

PHPは、Webサイト制作やWebアプリケーションの制作の現場で利用されていて、人気のプログラミング言語の中でも上位に入ってきています。
ただ、PHPで出来ることはそれだけではありません。PHPはPHPQueryを使うことで「Webスクレイピング」を行うことも可能なのです。

この記事では、PHPQueryを使ってWebスクレイピングをする方法についてご紹介していきます。

Webスクレイピングとは?

スクレイピングとは、ウェブサイトから情報を取得し、その情報を加工することで新たな情報を生成することです。

情報を取得するところまでは、クローリングと同様なのですが、スクレイピングでは取得した情報を加工する工程も含まれています。ただ、明確な定義がある訳ではないので、クローリングとスクレイピングを同じような意味で使っている可能性もあります。スクレイピングの例としては、様々なニュースサイトを巡回して見出しを抜き出したり、商品のデータを集めて価格表を作ったりといったことが挙げられます。

より高度な技術になると、InstagramやTwitterの情報もスクレイピングして、情報を得ることができるようになるため、とても便利です。

PHPでスクレイピングするならPHPQuery!

Pythonでスクレイピングを行う場合の一般的な方法として、PHPQueryを使う方法があります。
他にも方法はあるのですが、PHPQueryを使うのが1番簡単かつ、素早くスクレイピングをすることが可能です。

ここでは、PHPQueryの導入方法についてご紹介していきます。

PHPQueryの導入方法は?

PHPQueryの導入方法としては、PHPファイルをダウンロードするだけなので、とても簡単です。

以下のURLからPHPQueryをインストールしてください。
https://code.google.com/archive/p/phpquery/downloads

インストールし終わったら、phpQuery-onefile.phpを実行するプログラム(今回は、index.php)と同じディレクトリに保存します。

|-index.php
|-phpQuery-onefile.php

PHPQueryを使ってスクレイピングしてみよう!

3

次にPHPQueryを使って、実際にWebサイトをスクレイピングしてみましょう!先ほどダウンロードしたPHPQueryのファイルとindex.phpのみで動かすことが出来るため、作成するのは、PHPのプログラムを記入するファイルのみです。

では、まず以下のように記入していきます。

index.php

<?php

require_once("./phpQuery-onefile.php");

$html = file_get_contents("https://ja.wikipedia.org/wiki/%E4%B8%89%E5%9B%BD%E5%BF%97");

echo phpQuery::newDocument($html)->find("h3")->text();

?>

次に、具体的に何各行で何をしているのか、解説していきます。

1行目:PHPQueryを読み込む

まず、PHPQueryを下記の行で読みこんでいます。

require_once("./phpQuery-onefile.php");

PHPでライブラリや、他のPHPファイルを読み混む時には、includeかrequireを使用しますが、ここではrequire文を使っています。

ここで使っているrequire_onceは、普通のrequireとは若干違います。require_onceはライブラリや設定ファイルなどが、意図せず2回requireされるのを防いでいます。

2回requireされると、関数の再定義エラーや変数の書き換えなどが起こってしまいます。require_onceではこれを避けることが出来ます。

2行目:取得したいWebサイトのURLを読みこむ

2行目は、WebサイトのURLを読み込むことで、file_get_contentsはファイルの内容を文字列に読み込む方法として非常に好ましいものです。

ちなみに、今回読み込むサイトのURLは、「三国志」のウィキペディアページです。

$html = file_get_contents("https://ja.wikipedia.org/wiki/%E4%B8%89%E5%9B%BD%E5%BF%97");

3行目:見出し要素を表示

最後に、見出しの要素を見つけ出して表示するコードを書きます。今回は、h2なので、大見出しを抽出しています。

echo phpQuery::newDocument($html)->find("h2")->text();”

表示結果

以下が表示結果です。見事にh2の見出しが出力されましたね!

目次
概要[編集]
「三国志(歴史書)」と「三国志演義」の違い[編集]
中国における三国志の受容と流行[編集]
日本における三国志の受容と流行[編集]
派生した作品[編集]
注釈[編集]
出典[編集]
関連項目[編集]
案内メニュー

PHPQueryの基本的な使い方の例

では、PHPQueryで使える基本的な使い方の例をいくつかご紹介していきます。

HTMLの要素指定

HTMLの要素指定では、基本的にどの要素でも指定出来ます。

echo phpQuery::newDocument($html)->find("h2")->text();

この1行の「find()」の中身を、”h3”にしても、”a”や”p”にしても取得可能です。

idの属性指定

idの属性指定では、「find()」の中身を”.id名”にすることが可能です。例えば、このページでは、1番大きな見出し「三国志」のidが、”div id = first Heading”と表示されていました。

echo phpQuery::newDocument($html)->find(".firstHeading")->text();

以上のように書き込むと、出力結果は、「三国志」となります。

classの指定

同様に、classを指定しても値が出力されます。classで値を指定したい場合は、”#class名”で指定します。

echo phpQuery::newDocument($html)->find("#reference")->text();

出力結果は、

「&#91;注釈 6&#93;」

となります。

まとめ

今回はPHPQueryを使って、Webスクレイピングを行う方法についてご紹介してきました。初心者向けにご紹介してきましたが、PHPQueryを学習していくことによって、より高度なスクレイピングが出来るようになります。


この記事のキーワードに関する勉強会・イベントを探す

TECH PLAYでは、ITエンジニア向けの勉強会・イベント情報を提供しています。
興味のある方はぜひご参加ください。


おすすめのコラム