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でCSVを簡単に取り扱える「LeagueCSV(thephpleague / csv)」の利用方法
PHPでCSVファイルの書き込みや読み込みを行う際、バニラPHPで対応していたが ...
-
-
PHPのHTTPリクエストライブラリ「Requests for PHP」の利用方法
PHPで外部のAPI等にリクエストする際に可能であればfile_get_cont ...
-
-
PHPでExcelシートを出力する方法(PhpSpreadsheet)
PHPでエクセルシートを出力させたい。以前はPHPExcelを利用していたが現在 ...
-
-
MySQLのバックアップファイルを簡単に作成できるライブラリ「myphp-backup」の利用方法
MySQLのバックアップを取る際にadminerとかから手動で対応するのではなく ...
-
-
Composer無し&ファイル1枚でPHPのエラーメッセージ画面をリッチにするライブラリ「PHP Error」の利用方法
先日PHPのエラーメッセージを見やすくするwhoopsの利用方法をメモしたが導入 ...