HTML の構造を YAML で吐き出すスクリプトを書いた
pixiv の HTML がどんどん変わって pixiv gem が追従できなくて困った。ので楽するやつを書いた。 HTML を読み込ませると要素の親子関係と各要素の属性を YAML にして書き出す。テキストノード他は無視する。 XPath か CSS Selector で不要な要素を取り除くことができる。
!omap
で書き出してあるから map の順序が固定されていて diff しやすい。 pixiv の画像一覧ページなどを定期的に取得して HTML で保存しておき、最新の2つから広告やワンタイムトークンを削除しつつ YAML 化して差分を取る。で構造に変化があれば対応する。テストも自動化したいけどそれはいずれ。
使い方:
html2yaml.rb [-x, --exclude=<xpath or css>] \ [-i, --include=<xpath or css>] \ <URL or path>
--exclude
と --include
は複数回指定でき、書いた順に適用される。 --exclude
はマッチした要素とその子孫要素を出力から取り除く。 --include
はマッチした要素とその祖先要素を出力に含める。
コード:
出力例:
html2yaml.rb -x "*" -i div "http://www.google.com" | head -n20
--- !omap - :name: html - :attributes: !omap - itemscope: '' - itemtype: http://schema.org/WebPage - :children: - !omap - :name: body - :attributes: !omap - bgcolor: '#fff' - lang: ja - :children: - !omap - :name: div - :attributes: !omap - id: mngb - :children: - !omap - :name: div - :attributes: !omap