歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】他サイトの改修頻度をチェックするためにHTMLをYAML(っぽい何か)に変換するためのコマンドラインツールを書きました

上司から「サイトがマメに更新されてると、Google検索エンジンからの評価が上がるらしいんだけどさぁ、 他サイトの更新頻度をチェックしたり簡単に比較する方法ない?」というふんわりした話題がありました。

単純に考えると、サイトのHTMLを定期的にスクレイピングしてdiffを取ればいけそうですが、 商品の入れ替え等で細かい文言が変わってしまうことは容易に考えられます。

そこで、HTML(DOM)の構造のみを取り出して、比較的人が見やすいデータ構造であるyamlに変換することにしました。 調べてみると、既にRubyで似たようなコードを実装した方がいたようです。

uasi.hatenablog.com

これをそのまま使わせて頂いてもよかったのですが、一度Pythonコマンドラインツールを作ってみたかったのと、 USER-AGENTくらいは指定したかったので再実装しました。

うわ!_stdout_yamlの中がザ・糞実装みたいな感じですね!

クラスメソッドさんの記事にあったClickというライブラリが簡単そうだったのでそちらを利用しました。 デコレータをちゃんと使ったのは初めてかもしれません…。

dev.classmethod.jp

# クックパッドのトップページをテキストに書き出す
./honenuki.py --url='http://cookpad.com/' > output

結果はこんな感じです。一応yamlとして読み込めるようにはしたつもりですが、diff取るためだけに出力しているので努力はしてません。

- :name: 'html'
- :children:
  - :name: 'head'
  - :children:
    - :name: 'meta'
      :attributes:
        :charset: 'utf-8'
    - :name: 'meta'
      :attributes:
        :content: 'IE=edge'
        :http-equiv: 'X-UA-Compatible'
    - :name: 'script'
    - :name: 'link'
      :attributes:
        :media: 'handheld'
        :rel:
          - alternate
        :type: 'text/html'
        :href: 'http://m.cookpad.com/'
    - :name: 'link'

あとはgit管理して簡単にdiffを見れるようにすればいいだけですが、実際にうまくいくかどうかはやってみないとわからないですね…。