Lexiconの情報をとれるようになったぞ

まず、参考にLexiconの適当なページのHTMLソース全文をのせてみる。
https://gist.github.com/k5trismegistus/4dd778e284aac8c5796a
本題からはそれるけれども、このサークル名でぐぐると「ヤマジュンミュージアム」を引き継いだ人の関連人物らしく、意外なところでつながりを感じる。

さて、このHTMLをBeutifulSoupに食わせてから前回も載せた

circle = soup.find_all(href=re.compile('/browse/circle/[0123456789]+')

を適用すると、circleは以下の様なリストになる。(ただし、soupがBeautifulSoupオブジェクト。)

[サークルぬるま屋, Circle Nuruma-ya]


  Lexiconは日本語表記と英語表記を両方返すので、日本語表記のサークル情報を取り出すためにタグを取り除くのに加えてリストの偶数番目だけを取り出す必要も出てきた。([0::2]でスライスをとればいいだけの話)
Tagオブジェクトの.string属性に要素に含まれるテキストが入っているので、それをつかえばタグは除去できる。

また、タイトルの取得はどうするかというと、タイトルの入っている行をみる。

原題:神奈子様夢妄想

'原題:'という文字列はここにしか出てこない文字列であるため、これを検索キーワードに使うことができそうだ。昔の自分なら'原題:'を含む行を取り出して正規表現でゴリ押し…としているところだったが、BeautifulSoupを使うことで、非常にスマートに解決可能だった。
'原題:'というテキストを含む要素を探して('原題:'というテキストでないことに注意。もタグだからテキストには含まれない。が挟んでいる「テキスト」はあくまでも'原題:'なのである。)その弟の要素を取り出すと神奈子様夢妄想が手に入る。Tagオブジェクトの.next_siblingが弟要素になっている。
あとはこれからタグを取り除くだけ。

 発行日の入っている行は

発行日:2009-06-07

なので、タイトルと同じように処理できる。そして取得できた文字列を'-'で分割すれば[年,月,日]のリストにできる。

ということで作ってみたのが以下。

これを実行すると、以下が標準出力にでてくるはず。

title:神奈子様夢妄想
circle: ['サークルぬるま屋']
author: ['月わに']
parody: ['東方Project']
date: ['2009', '06', '07'] 

URLの部分をhttp://www.doujinshi.org/book/558457/kousyubenjo/にしてみたら

title:紅羞便所
circle: ['遥夢社', '夢見ごこち']
author: ['源五郎', '御影獏']
parody: ['東方Project']
date: ['2012', '12', '30']

と、サークルや著者が複数でもOK。(遥夢社の『神様といっしょ!』も数少ない神奈子様がそういう対象になっている本である。おすすめ。)
このスクリプトもとりあえずGithubにあげた

ああ、次はXML編集・アーカイブへの書き込みだ…

ちなみに、先日東方好きの高校の頃の同級生に会った時に、神奈子様が東方Projectシリーズで一番良いよね、という話をしたところ、「本気で言ってるの?」と言われてしまった。
ロリコンが多い世の中、生きづらいですね。