BeautifulSoupでCSSセレクタによるエレメント選択を行うエクステンション
動機
とりあえずいきさつから・・・
社内の面倒な雑務をPythonのスクレイピング(urllibとか)の習得がてら自動化するスクリプトを書いて遊ぶ。
↓
HTML解析マンドクセ。
↓
でも、適当にやったら動いてしまったのでそのまま放置。
↓
2ヶ月後ぐらいにjQueryを触り、CSSセレクタのエレメント選択に衝撃を受ける。
↓
Pythonにポーティングしようと目論む。
↓
Twitterでエクステンション作るぜと書いたら賛同してもらえるが、やるやる詐欺。
↓
見事なダメっぷりを見せつけるが、年が変わったのを機に本腰を入れる。
↓
てか絶対先行で実装されてるよね?ぐーぐる大先生に聞いてみよう。
↓
既に実装されたエクステンションが見つかっちゃいました、テヘッ。←今ココ
↓
こんなエクステンション使えないお。やっぱり自分で作るお。
ということでこのエクステンションのDL先
http://code.google.com/p/soupselect/
簡単な解説
DL先のページを開くとサンプルがさらりと書いてあるのでとりあえずこれのURLを変えて動かしてみればすぐわかるかと。
BeautifulSoupの解説は脱線するので省略(というか詳しく知らん
サンプルコードの上がグローバル関数で第1引数にBeautifulSoupのオブジェクト渡して選択するタイプ、下がBeautifulSoupに直接組み込むタイプ。
個人的にはグローバル関数を汚すか、BeautifulSoupのクラスを汚すぐらいかの認識なんだけど、どちらを使うかはお好みで。
所見
まあjQueryほどには及ばないもののそこそこ使いやすくはなってると思うのでWebスクレイピングのお供にどうぞ。
といいたいところなんだけどの階層のCSSセレクタ(parent > childとか)が使えなかったり、BeautifulSoupに組み込んでもsoup.("some_selector").contents()を使おうとすると怒られたりとかイマイチ使いにくい(後者はあんまり詳しく検証してない。
さらに開発がとまっているのか2007年頭に階層のCSSセレクタが改良要望が出ているのになんかコード実装される気配がまったくなし・・・
愚痴ってもしゃーないので、個人的に改造するかjQueryのポーティングを本気で考えようかと。
とりあえずこれ使って自分の作ってるスクリプトの改良が終わってからの話だけど。