HTMLのパーサで、変化の激しいW3Cの世界で、互換性や新機能に追従していくのは難しそう。
そこで、いっそのこと実際のブラウザのパーサ機能だけは使えないか?つまり、ヘッドレスブラウザならどうか、JSを動かす必要は無くて、HTMLのパーサ機能だけ欲しい。
ということで、ヘッドレスブラウザのレンダリング機能を扱えるアプローチを探るため、SeleniumやWebDriver系でどう扱えそうかかるくググったメモです。
- Linux環境で使えそうなOSSのレンダリングエンジンの実装で、一番追従が激しいのは、Chromeか。
- c++ - How to use Google Blink/Webkit to render HTML code - Stack Overflow
- Any way to start Google Chrome in headless mode? - Stack Overflow
- webkit - Headless browser automation using blink - Stack Overflow
Chrome用 + Chrome自身の開発速度が速いこともあり、簡単にパース機能「だけ」使える状況では無さそう。
PhantomJS + WebDriverのアプローチはどうか?軽くググッてみる。xpathで要素取り出せたりとかができれば便利だろう。
- PhantomJSと各ブラウザのJavascriptエンジンまとめ | tsuchikazu blog
- Selenium 使いのための PhantomJS 解説 - Qiita
- php - how do i disable javascript while running headless selenium server and using firefox? - Stack Overflow
- Disabling Javascript · Issue #253 · detro/ghostdriver · GitHub
- selenium - Why is not possible to disable JavaScript in GhostDriver / PhantomJSDriver? - Stack Overflow
- Disable JavaScript using Selenium WebDriver - Yi Zeng
- python - How to disable JavaScript in PhantomJS through Selenium WebDriver - Stack Overflow
結論 : PhantomJSのWebDriverは、結局内部的にJSが動く。そのため、JSをdisabledにしたらODM要素の取り出しなど全部動かなくなるので今回の観点からはナンセンス。
どうも、HtmlUnitをWebDriverでラップしたHtmlUnitDriverが最速らしい。これならJSも動かさずにいけるかも?
- HtmlUnitDriverを使ってHTMLスクレイピング in Scala - Qiita
- HtmlUnit – Welcome to HtmlUnit
- HtmlUnit賛歌 - uehaj's blog
- HtmlUnit vs JSoup: html parsing in Java | Krishna's Blog
- http://krishnasblog.com/2012/12/19/htmlunit-vs-jsoup/
- HTMLパーサであるJSoupとの比較記事。
とりあえずメモなので結論は出せません。ただ、以前IEのconditional comments で躓いたことがありますが、JSoupの方はissueがopenなまま ( https://github.com/jhy/jsoup/issues/360 ) で、HtmlUnit の方も多少対応はされてるようですがどこまで耐えられるのかちょっと心配です。