猫でもわかるWebプログラミング

試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。

PHPでサクッとWebスクレイピングするならphpQuery

f:id:yoshiki_utakata:20181004212834j:plain

composer で phpQuery をインストールする

Composer が入っている前提とします。

composer require electrolinux/phpquery

htmlをパースする

Guzzleでリクエストをして、返ってきたHTMLをパースするとする。

<?php

$guzzle = \GuzzleHttp\Client();
$response = $guzzle->get(...);

// response body の contents に string で html が入っている
$html = $response->getBody()->getContents();

// phpQuery の newDocument に string を渡すとパースされる
use phpQuery
$parsed = phpQuery::newDocument($html);

// form タグの action(url) を取得する。
// find は CSS セレクタなどが利用できる
// attr で属性が取得できる
// <form class="upload" action="/api/upload"> の
// /api/upload を取得できる
$actionUrl = $html->find('form.upload')->attr('action');

まとめ

セレクタまわりの仕様は変わることもないので、 phpQuery はずっと動き続けることでしょう。