webスクレイピングには、色々な方法があります。
本記事では、CakePHP4 で Goutte を利用したwebスクレイピングの方法を説明しています。
準備
前提条件
Goutte を利用するための前提条件は、下記のとおりです。
・Goutte depends on PHP 7.1+.
インストール
コンソール上で、composer を実行します。
1 |
composer require fabpot/goutte |
サンプルプログラム
Clientの生成
1 2 |
use Goutte\Client; $client = new Client(); |
リスエスト発行
1 2 |
$client = new Client(); $crawler = $client->request('GET', 'https://hogehgoe.com'); |
タイムアウトの設定
1 2 3 4 |
use Goutte\Client; use Symfony\Component\HttpClient\HttpClient; $client = new Client(HttpClient::create(['timeout' => 60])); |
リンクのクリック
1 2 3 |
// Click on the "Security Advisories" link $link = $crawler->selectLink('Security Advisories')->link(); $crawler = $client->click($link); |
前のページへ戻る
1 |
$client->back(); |
次のページへ進む
1 |
$client->forward(); |
リンクタグの取得
特定タグ配下のデータを取得するには、無名関数を利用します。
1 2 3 4 |
// Get the latest post in this category and display the titles $crawler->filter('h2 > a')->each(function ($node) { echo $node->text()."\n"; }); |
User Agent を指定する
1 2 |
$client = new Client(); $client->setHeader('User-Agent', 'XXXXXXXXXX'); |
フォーム入力
1 2 3 4 5 6 7 |
$crawler = $client->request('GET', 'https://hogehoge.com/'); $crawler = $client->click($crawler->selectLink('ログイン')->link()); $form = $crawler->selectButton('ログイン')->form(); $crawler = $client->submit($form, ['userid' => 'hogehoge', 'password' => 'xxxxxx']); $crawler->filter('.flash-error')->each(function ($node) { echo $node->text()."\n"; }); |
まとめ
Goutte を利用した、web スクレイピングの方法について、
よく使う方法は、上記のとおりです。
このように、簡単な記述で、web スクレイピングすることが可能です。
ぜひ、ご参考にしていただければと思います。
公式サイト
fabpot/goutte
Goutte is a screen scraping and web crawling library for PHP.
Goutte provides a nice API to crawl websites and extract data from the HTML/XML responses.