BeautifulSoupでタグのクラス名を取得するとリストになる

PythonでSIRIUSの記事をスクレイピングして、それをWordPressへ投稿するツールを作り、BeautifulSoupとJSONとRESTがわかればそれほど大変じゃない。

と思っていたけど、細かいところで色々と問題が出てくるわね。

という話は、また次の機会にして、今回はBeautifulSoupを使って、タグのクラス名を取得しようとしてちょっとハマった話。

タグのclass属性って1つじゃないのね

サイトマップページで、投稿されている記事の一覧を取得しようとした処理。

SIRIUSのサイトマップでは、ドメイン直下、カテゴリ配下、サブカテゴリ配下の投稿されている階層によって、ページのリストのliタグには、l1からl3までのclassが設定されている。

WordPressでもこの階層を維持したいから、l1からl3までのclassを取得しようと思って、

level = li['class']

という感じでクラス名を取得して、このlevelを文字列のつもりで扱おうとするとエラーが。

「文字列じゃない!」って怒られる。

print(str(level))

ってやると

['l1']

って出てくるから、たしかに単純な文字列じゃない。

ここでPythonに慣れている人なら、大かっこ([])で囲まれているんだからリストだとすぐわかるんだろうけど、まだまだなワタシはしばらく悩んでしまったわ。

で、やっとひらめいて、これはリストだと。classって複数設定できるから、文字列じゃなくて、文字列のリストで返ってくるんだと。

とうことで、

level = li['class'][0]

とやれば、ちゃんと文字列として扱えた。

そう言えば、BeautifulSoupの説明を前に眺めていたときに、そんなことが書いてあったような気もする…。

とにかく、これで階層の情報も取得することができて、また一歩前進。

コメント

タイトルとURLをコピーしました