Goutteではまった


巷ではgoutte vs simple_html_dom が話題ですが
goutteはyoutubeのスクレイピングは出来ませんでした。
というかgoutteのせいではなく内部で使用しているsymfonyのdomcrawlerが原因ですが。

scraping.php
<?php
require('./vendor/autoload.php');
use Symfony\Component\DomCrawler\Crawler;

$url = 'https://www.youtube.com/results?search_query=php';

$crawler = new Crawler();
$crawler->addContent(file_get_contents($url));
echo $crawler->html();

これでどうなるかというと
javascript内の

var content = '<!DOCTYPE html><html><head></head><body>' +iframeContent + '</body></html>';

の一文を誤解析して、この先の内容がどうやっても取れませんでした。

2015/6/12

さらに調べてみると内部で使っているphp組み込みのXML DOM Parserが根本原因のようで、
いろいろイレギュラーな形になっているっぽいHTMLの都合は考慮されていないみたい。

simple_html_domは完全に自前のParserで正規表現を使ってscriptタグを排除したりいろいろしてくれているのでphpでスクレイピングするならこちらのほうが無難のよう。