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の説明を前に眺めていたときに、そんなことが書いてあったような気もする…。
とにかく、これで階層の情報も取得することができて、また一歩前進。
コメント