Drafts

@cm3 の草稿置場 / 少々Wikiっぽく使っているので中身は適宜追記修正されます。

morph.io を使うための Tips

Q: lxml vs BeautifulSoup ?

A: BeautifulSoup 4

BeautifulSoup は 4から、lxml をパーザとして指定することができる(参考:python - BeautifulSoup and lxml.html - what to prefer? - Stack Overflow)ので、基本的に BeautifulSoup を介して利用したほうが便利。

soup = BeautifulSoup(html, "lxml")

のようにして使う。デフォのパーザを使いたいときは以下の通り。

soup = BeautifulSoup(html, "html.parser")

lxml は Windows では pip でインストールできない(失敗すると思う)ので、condawheelでインストール(参考:minicondaをvirtualenvと組み合わせて使う - Drafts)。

こういう外部のライブラリを使ったときは requirements.txt に書かなければならない(参考:morph.io: How to use any library in your scraper)。書式は pip freeze の出力と同じ。必要なライブラリを把握するためにも venv は必須(参考:Python 3.3 以降の venv - Drafts

その他参考:

Q: scraperwiki ライブラリを使うべきか?

A: No, in python. No, in Node.js neither.

scraperwiki 0.5.1 : Python Package Indexgithubでソースが管理されているが開発が活発ではない。また、サービス用にカスタマイズしたブランチを使うようにmorph.ioのドキュメントに指示されているが、こちらはさらにメインのライブラリへの追随が遅れている。また、それぞれのコード量は対して多いわけでもなく、独自のインタフェース(それ自体は洗練されていて使いやすい)を覚えるのに必要な労力と見合わないと感じた。また、本家の方を使ってmorph用にデータベース名を「data.sqlite」にしようとすると環境変数を介す必要があり、os.environ で書き換えても駄目だったので、面倒だ。デフォは「scraperwiki.sqlite」になっている。scraperwiki.com 時代の名残だろうか。

そこで、scraperwikiライブラリのソースコードを参考にしつつコード部分はコピペでもいいので直接書いたほうが良い。

みたいなのを参考に INSERT OR REPLACE INTO ... をコードに組み込んだり、まあ勉強にもなるし。

そして、ドキュメントの Node.js 欄や morph.io: drzax/morph-hansard のような例を見ても Node.js の場合は一般的なライブラリを使っている。それで十分じゃないかな。

その他参考:

その他参考