読者です 読者をやめる 読者になる 読者になる

ヤルキデナイズド

Unclassified Articles on Software and IT

HTML の構造を YAML で吐き出すスクリプトを書いた

pixiv の HTML がどんどん変わって pixiv gem が追従できなくて困った。ので楽するやつを書いた。 HTML を読み込ませると要素の親子関係と各要素の属性を YAML にして書き出す。テキストノード他は無視する。 XPathCSS 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 はマッチした要素とその祖先要素を出力に含める。

コード:

Dump HTML outline as YAML

出力例:

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