「Php/Goutte」の版間の差分
ナビゲーションに移動
検索に移動
ページの作成:「==Goutteとは== スクレイピングライブラリです。PHP5.3以降サポート ==ベンチマーク== Simple HTML DOM Parserより良いらしい。 参照:ht...」 |
|||
| 31行目: | 31行目: | ||
attr($attribute) 最初のノードの、指定した属性の値を返す | attr($attribute) 最初のノードの、指定した属性の値を返す | ||
text() 最初のテキストノードの値を返す | text() 最初のテキストノードの値を返す | ||
html() 最初のHTMLノードを取得する | |||
==サンプル== | ==サンプル== | ||
2016年1月25日 (月) 15:18時点における版
Goutteとは
スクレイピングライブラリです。PHP5.3以降サポート
ベンチマーク
Simple HTML DOM Parserより良いらしい。
参照:http://qiita.com/soarcreator/items/56a971d42b8b640b76a6
使い方
https://github.com/fabpot/goutte
DL
wget https://raw.github.com/fabpot/Goutte/master/goutte.phar
dom操作
filter('h1') CSSセレクタにマッチするノード
filterXpath('h1') XPath式にマッチするノード
eq(1) 指定したインデックスのノード
first() 最初のノード
last() 最後のノード
siblings() 兄弟のノード
nextAll() 後の兄弟ノード
previousAll() 前の兄弟ノード
parents() 親ノード
children() 子ノード
reduce($lambda) callableがfalseを返さないノード
selectLink($value) 指定されたテキストを含むリンクすべてを選択
selectButton($value) 指定されたテキストを含むボタンすべてを選択
値取得
attr($attribute) 最初のノードの、指定した属性の値を返す text() 最初のテキストノードの値を返す html() 最初のHTMLノードを取得する
サンプル
require_once __DIR__ . '/goutte.phar'; use Goutte\Client; $client = new Client(); $url = "http://example.com"; $crawler = $client->request('GET', $url); $dom = $crawler->filter('link'); $dom->each(function($node) { // rss取得 if ($node->attr('type') == "application/rss+xml") { echo $node->attr('href')."\n"; } }); $dom = $crawler->filter('h1'); $dom->each(function($node) { echo $node->text()."\n"; }); $dom = $crawler->filter('a'); $dom->each(function($node) { if (preg_match("!http://!", $node->attr('href'))) { echo $node->attr('href')."\n"; echo $node->text()."\n"; } }); $dom = $crawler->filter('h2.post > a') $dom->each(function ($node) { print $node->text()."\n"; }); //$dom = $crawler->filter('table.content td');
htmlをhttpでとってこずにsetする場合
use Symfony\Component\DomCrawler\Crawler; $html = <<<'HTML' <!DOCTYPE html> <html> <body>
<p class="message">Hello World!
<p>Hello Crawler!
</body> </html> HTML; $crawler = new Crawler($html);
Aタグのリンククリック
$crawler = $client->request('GET', $url);
$targetLinkText = 'もっとみる';
$link = $crawler->selectLink($targetLinkText)->link();
$crawler = $client->click($link);
user_agent偽装
$client->setHeader('User-Agent', 'Googlebot-Video/1.0');
$client->setHeader('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36'); // chrome28