勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ

phpQueryを利用したjQueryライクなスクレイピング方法

   2024/03/13  PHP

phpQueryというライブラリを使用することでjQueryのセレクタ指定のような形でスクレイピングができるらしい。以前に似たようなライブラリ(PHP Simple HTML DOM Parser)もメモしたが、他の手段も持っておきたいので以下に実装方法をメモ。

 

ダウンロード

https://code.google.com/archive/p/phpquery/downloads

現時点だと「phpQuery-0.9.5.386-onefile.zip」が最新っぽい。ダウンロードしたファイルを解凍して適当なディレクトリにアップロードしておく。

 

ソースコード

基本的な使い方

<?php
include('./phpQuery-onefile.php');

$url = 'https://taitan916.info/blog/';
$html = file_get_contents($url);
$dom = phpQuery::newDocument($html);

//サイトのtitleタグ取得
var_dump($dom['title']->text());

//記事のタイトル取得
foreach($dom['#topnews:eq(0) dd h3 a'] as $row){
    var_dump(pq($row)->text());
}

//記事のアイキャッチ画像のsrcとalt属性の内容を取得
foreach($dom['#topnews:eq(0) dt a img'] as $row){
    var_dump($row->getAttribute('src'));
    var_dump($row->getAttribute('alt'));
}

「file_get_contents(): SSL operation failed」エラーが発生する場合

以下のようにオプションを指定する。

<?php
include('./phpQuery-onefile.php');

$url = 'https://taitan916.info/blog/';

$option = [];
$option['http'] = [];
$option['http']['ignore_errors'] = true;
$option['http']['method'] = 'GET';
$option['ssl'] = [];
$option['ssl']['verify_peer'] = false;
$option['ssl']['verify_peer_name'] = false;
$http_response_header = null;

$html = file_get_contents($url, false, stream_context_create($option));
$dom = phpQuery::newDocument($html);

//サイトのtitleタグ取得
var_dump($dom['title']->text());

//記事のタイトル取得
foreach($dom['#topnews:eq(0) dd h3 a'] as $row){
    var_dump(pq($row)->text());
}

//記事のアイキャッチ画像のsrcとalt属性の内容を取得
foreach($dom['#topnews:eq(0) dt a img'] as $row){
    var_dump($row->getAttribute('src'));
    var_dump($row->getAttribute('alt'));
}

「Fatal error: Class 'DOMDocument' not found」エラーが発生する場合

過去記事を参照の上でphp-xmlをインストールすること。

 

所感

使いやすくはあるがライブラリの最終更新が2009年とちょっと古めなので新規案件で使うことはなさそう。

 - PHP

  関連記事

JavaScriptの日時・時刻用ライブラリ「Day.js」の利用方法について
JavaScriptの日時・時刻用ライブラリ「Day.js」の利用方法について

JavaScriptの日時・時刻用を取り扱う際、PHPと比べると(個人的には)使 ...

JavaScriptにて数値のカウントアップ及びカウントダウンを表示する「countUp.js」ライブラリの利用方法
JavaScriptにて数値のカウントアップ及びカウントダウンを表示する「countUp.js」ライブラリの利用方法

だいぶ前にバニラJSにて数値のカウントアップ及びカウントダウン表示を行う方法をメ ...

JavaScriptの「Flatpickr」ライブラリで時分のみ表示する方法
JavaScriptの「Flatpickr」ライブラリで時分のみ表示する方法

バニラJavaScript対応の日時ピッカー「Flatpickr」ライブラリでカ ...

PHPで「ramsey/uuid」ライブラリを用いてUUIDを生成する方法
PHPで「ramsey/uuid」ライブラリを用いてUUIDを生成する方法

PHPでUUID(Universally Unique Identifier)を ...

JavaScriptでCookieを取り扱う「js-cookie」ライブラリの利用方法
JavaScriptでCookieを取り扱う「js-cookie」ライブラリの利用方法

「jquery-cookie」プラグイン開発終了に伴い「js-cookie」ライ ...