Webページの画像URLやリンク先URLを全て取得したいということが結構あったのでライブラリ化させて公開しました。
https://github.com/awesam86/imlinscraper
GitHubで公開して、Composerから導入できるようにしました。
どんなライブラリなのか
ImlinScraperは、Webページ内のimg要素やa要素の情報を一括で取得して配列で返すスクレイピング系ライブラリです。複数ページから一括で取得することや、外部リンクのみを抽出するといったことも簡単にできます。検索エンジンの検索結果から情報収集する時なんかに役立ってくれる感じですね。
導入方法
Composerからの導入
Composerのインストールはされていることを前提とします。
composer.jsonに以下を記述。
{
"require": {
"awesam86/imlinscraper": "~1.0"
}
}
composer installで導入。
$ composer install
これで、あとはautoload.phpをrequireなどで読み込むだけで使えるようになります。
GitHubからダウンロードして使用する場合
Composer経由でなくても、GitHubからダウンロードしてsrc/Awesam86/ImlinScraperの中にあるScraper.phpを読み込むことで使用可能となります。
使用方法
autoload.phpの読み込みと名前空間のインポート
// autoload.phpの読み込み(autoload.phpのパスが異なる場合は適宜変更してください)
require_once __DIR__."/vendor/autoload.php";
// useを使って名前空間のインポート
use Awesam86\ImlinScraper\Scraper;
GitHubからダウンロードした場合は、autoload.phpの読み込みの代わりにダウンロードしたScraper.phpを読み込みます。
require_once "ダウンロードしたScraper.phpのパス";
Scraperインスタンスの生成
インスタンスの生成時にページURLを引数で渡します。
複数URLを配列で渡すことで一度に複数ページの情報を取得することもできます。
また、取得する際のUAを変更したい場合は第二引数で指定することも可能です。
- 第一引数:String or Array - ページURL(省略可)
- 第二引数:String - UserAgent(省略可)
// 1ページの情報取得の場合
$scraper = new Scraper('情報取得したいURL');
// 複数ページの情報取得の場合
$scraper = new Scraper(['情報取得したいURL1','情報取得したいURL2']);
画像情報を取得する方法
インスタンス生成時にページURLを引数で渡さなかった場合や、ページURLを変更したい場合は引数でページURLを渡すことが可能です。
また、特定の要素の子要素のみを取得したい場合などは第三引数にXPathの構文を指定することで取得することもできます。
- 第一引数:String or Array - ページURL(省略可)
- 第二引数:String - UserAgent(省略可)
- 第三引数:String - カスタムXPath(省略可)
戻り値の配列のキー
src => 画像URL
alt => 代替テキスト
// 通常取得の場合
$imgsInfoArray = $scraper->GetImagesData();
// UserAgentを指定した場合
$imgsInfoArray = $scraper->GetImagesData(NULL,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0) Gecko/20100101 Firefox/43.0');
// XPathで要素を指定した場合(下記の場合はdiv要素の子要素のみを取得します)
$imgsInfoArray = $scraper->GetImagesData(NULL,NULL,'div/');
// 戻り値の配列を出力
var_dump($imgsInfoArray);
リンク情報を取得する方法
第三引数までは、画像情報の取得と同じです。
第四引数は、外部リンクのみ取得したい場合にtrueにしてください。(デフォルト値はfalse)
- 第一引数:String or Array - ページURL(省略可)
- 第二引数:String - UserAgent(省略可)
- 第三引数:String - カスタムXPath(省略可)
- 第四引数:Boolean - 外部リンクのみの抽出(省略可)
戻り値の配列のキー
href => リンク先URL
text => ノード値
// 通常取得の場合
$linksInfoArray = $scraper->GetLinksData();
// 外部リンクのみを取得する場合
$linksInfoArray = $scraper->GetLinksData(NULL,NULL,NULL,true);
// 戻り値の配列を出力
var_dump($linksInfoArray);