PHPでスクレイピングする方法:phpQueryの設定方法から使い方

2021年6月15日

当サイトはアフィリエイト広告を利用しています。

疑問

PHPで簡単にスクレイピングする方法はある?

PHPを使って特定のURLをスクレイピングをするなら、Googleが提供しているphpQueryを使うと便利です。

指定したURLで使われている「id」や「class」を指定して、スクレイピング(中身を抽出)ができます。

PHPでスクレイピングをする方法

Googleが提供している、下記のPHPファイルを利用します。composerなしで使えます。

利用するPHPファイル

一番新しい「phpQuery-0.9.5.386-onefile.zip(May 2, 2009)」をダウンロードしてください。

phpQueryの設定方法

ダウンロードしたファイルを解凍すると「phpQuery-onefile.php」が作成されます。

このファイルを、FTPでサーバーにアップし、require_onceで読み込ませます。

require_once(dirname(__FILE__).'phpQuery-onefile.php');

このファイル一つでスクレイピングができます。

phpQueryの使い方

phpQueryの使い方を説明します。

phpQueryでは、ページを丸ごと取得してDOMを分析し、指定した値を取り出すという仕組みになっています。

基本的な使い方

//ページを丸ごと取得
$html = file_get_contents('https://xxxxx/');

//DOM分析
$doc = phpQuery::newDocument($html);

//タイトルタグを指定してデータを取得
echo $doc['title']->text();
echo pq('title')->text();

要素の指定方法は、下記のどちらでも、抽出結果は同じです。

  • $doc['title']
  • pq('title')

上記の例で指定した「title」は、HTMLタグですが、id(#aiueo)やclass(.aiueo)も指定できます。

echo pq('div#aiueo')->text();

idやclassはつなげて指定することもできます(#sns .twitter)。

echo pq('div#sns .twitter')->text();

また、text()の部分は、下記のものに変更できます。

  • text()
  • html()
  • attr("src")
  • attr("href")
  • attr("rel")
  • attr("id")
  • attr("class")

text()は、テキストデータのみを取得します。

html()を使えば、HTMLタグごとスクレイピングできます。

また、attr("xxx")と指定すると、指定したタグに設定されているattributeの値を抽出できます。

テーブルデータをループして抽出する

phpQueryを使って、テーブルタグの特定の値を、抽出することもできます。

テーブルタグを指定して、その中の値をループ処理でスクレイピングします。

例えば、下記のようなテーブルタグがあるとします。

<table>

<tbody>
<tr>
<td>1</td>
<td>twitter</td>
<td>内容:あいうえお</td>
<td>15:00</td>
<td>https://xxx</td>
</tr>

<tr>
<td>2</td>
<td>facebook</td>
<td>内容:あいうえお</td>
<td>15:00</td>
<td>https://xxx</td>
</tr>

<tr>
<td>3</td>
<td>facebook</td>
<td>内容:あいうえお</td>
<td>15:00</td>
<td>https://xxx</td>
</tr>

<tr>
<td>4</td>
<td>twitter</td>
<td>内容:あいうえお</td>
<td>15:00</td>
<td>https://xxx</td>
</tr>

<tr>
<td>5</td>
<td>pintarest</td>
<td>内容:あいうえお</td>
<td>15:00</td>
<td>https://xxx</td>
</tr>

</tbody>
</table>

このテーブルタグから、tdタグの値をスクレイピングしたい場合は、下記のようなサンプルコードになります。

$html = file_get_contents('https://xxxx');

$doc = phpQuery::newDocument($html);

foreach($doc['tbody:eq(0) tr'] as $row){

  $num = pq($row)->find('td:eq(0)')->text();
  $sns = pq($row)->find('td:eq(1)')->text();
  $body = pq($row)->find('td:eq(2)')->text();
  $time = pq($row)->find('td:eq(3)')->text();
  $url = pq($row)->find('td:eq(4)')->text();

}

以上が、phpQueryの使い方です。

Githubにあるphpqueryを使うこともできる

phpQueryファイルは、Githubにもあります。このphpQueryもcomposerなしで使えます。

利用するPHPファイル

「Code」>「Download ZIP」をクリックします。

TobiaszCudnik / phpqueryの設定方法

ダウンロードしたZIPファイルを解凍すると、phpquery-masterフォルダができます。

このフォルダの中にある「phpQuery」フォルダをだけを使います。他のファイルは使いません。

「phpQuery」フォルダをまるごと、FTPでサーバーにアップし、require_onceで読み込ませます。

require_once(dirname(__FILE__).'/phpQuery/phpQuery.php');

TobiaszCudnik / phpqueryの使い方は、前述のphpQueryの使い方と同じなので省きます。

どちらのphpQueryを使っても、同じようにスクレイピングができます。

phpQueryを使って、検索順位チェックツールも作れます。

検索順位チェックツールをPHPで自作する方法:サンプルコード付

検索順位チェックツールを、PHPで自作してみました。 順位チェックできるキーワードは、10個くらいなので、お試しレベルのツールです。エラー処理などは全くつけていません。 作り方やサンプルコードを紹介し ...

-調査
-,