調査

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

疑問

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

Googleが提供しているphpQueryを使うと、idやclassを指定してスクレイピング(中身を抽出)することができます。

利用するのは、下記のPHPファイルです。

参考

phpquery(外部リンク)
※phpQuery-0.9.5.386-onefile.zip(May 2, 2009)をダウンロードします。

以下からphpQueryの設定方法や使い方紹介します。

phpQueryの設定方法

まずは、ダウンロードしたphpQueryをサーバーにアップしてrequire_onceで読み込ませます。

※composerによるインストールは不要です。

require_once('phpQuery-onefile.php');

phpQueryの使い方

phpQueryの使い方も簡単です。

基本はページを丸ごと取得してDOM分析して利用するという形になっています。

基本的な使い方

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

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

//タグ、id、classを指定してデータを取得
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")

※attr()は取得したいattributeを指定できます。

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

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

テーブルデータをループして取得する

下記のようなテーブルデータがあった場合、foreachを使ってループ処理ができます。

<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>
$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();

}

繰り返しが必要な場合はforeachを使うと便利です。

-調査
-,

© 2021 WPORZ