pythonでスクレイピング
を見て、pythonでもElementTreeを使ったらできるんじゃないかなと思ったけども、 ちゃんとしたXMLじゃないとparse時にエラーになってしまう。じゃあ、ElementTreeに 渡す前にHTMLをXHTMLに変換したらいいのかと思って標準ライブラリを探すも、どうや ら標準でそういうことをするライブラリはないらしい。googleさんにお尋ねしてみた所 下記のエントリを発見。
まさに同じような悩みで色々探していらっしゃって、ここでBeautifulSoupを知りまし た。結構昔からあったモジュールみたい。
で、secondlifeさんの所で例に上がってたHTMLデータでHTML->XHTMLに変換してから ElementTreeに突っ込んでみたんだけどやっぱりパースエラーになってしまう。 困ったなーと思いながら、BeautifulSoupのドキュメントをもうちょっと読んでたら BeautifulSoup自体でHTMLやらCSSのタグや要素を指定してできるらしい。
名前、ふりがな、カテゴリ、URL一覧を抜き出すコードは以下のように書ける。
import urllib
from BeautifulSoup import BeautifulSoup
URL='http://d.hatena.ne.jp/keyword/%BA%B0%CC%EE%A4%A2%A4%B5%C8%FE'
b = BeautifulSoup(urllib.urlopen(URL))
data = {'name' : b.find('span', 'title').a.string, #名前
'furigana': b.find('span', 'furigana').string, #ふりがな
'category': b.find('ul','list-circle').li.a.string} #カテゴリ
# URL一覧 : もうちょっと美しく書けるんじゃないかな・・?
urls = []
for i in b.findAll('a'):
try:
if i.attrs[0][0] == 'href':
urls.append(i.attrs[0][1])
except IndexError:
continue
これは素晴らしい!これまでちまちまと正規表現やらHTMLParserやらでやってたのはな んだったんだろうという気にさせられる。

