phpQueryを利用したjQueryライクなスクレイピング方法
2024/03/13
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」エラーが発生する場合
所感
使いやすくはあるがライブラリの最終更新が2009年とちょっと古めなので新規案件で使うことはなさそう。
関連記事
-
-
PHPでOGPタグ(metaタグ)を簡単に取得できる「OpenGraph.php」の利用方法
PHPでOGPタグ(metaタグ)を取得する際、file_get_content ...
-
-
JavaScript / PHPにて「lz-string」を用いてデータの圧縮・展開する方法
文字数が多いGETパラメータを送信したいというケースがあった。また、送信側はJa ...
-
-
PHPでシンプルな英数字のCAPTCHAを「Gregwar / Captcha」ライブラリで実装する方法
PHPでシンプルなランダム英数字のCAPTCHAを実装したい。「Gregwar ...
-
-
PHP Simple HTML DOM Parserを使用したスクレイピング方法
PHPでスクレイピングする際、preg_match_all等を用いて必要なデータ ...
-
-
MySQLのバックアップファイルを簡単に作成できるライブラリ「myphp-backup」の利用方法
MySQLのバックアップを取る際にadminerとかから手動で対応するのではなく ...