数学的にどうなのさ?

大学時代にちょっと長く数学を勉強した人の雑記。数学のこと(主に統計)や趣味、メモなどが多くなります

Pythonモジュールbs4について

概要

Wiki上のテーブルを自動で取得できないかと思って調べたら行きついた。
Pandasのread_htmlとも相性がよさそう。
まあ本当にやりたいところに行きつくまでには課題はたくさんありますが…

インストール

いつものAnacondaを使っている人は

conda install beasutifulsoup4

でインストール。そうじゃないならpipを使う。

使い方

wikiページのhtmlを取得

import requests
import bs4
url = "https://wikiwiki.jp/kancolle/%E6%94%B9%E4%BF%AE%E5%B7%A5%E5%BB%A0"
r = requests.get(url)
r.raise_for_status()
soup = bs4.BeautifulSoup(r.text, 'html.parser')

これでsoup内にhtmlが格納される。

テーブルタグ部分だけ抜き出す

elem = soup.select('table')

これでテーブルタグで作られた部分をリスト形式で取得できる。

特定のタグを削除する

タグで囲まれた文章まで削除してもいいなら、

for h in soup.find_all('a'):
    h.decompose()

で可能。これだとリンク部分が文章毎削除される。

文章を残したいなら

invalid_tag = ['a', 'br']
for tag in invalid_tag:
    for match in soup.find_all(tag):
        match.replaceWithChildren()

でできる。上の例はついでに改行も削除する場合。

タグ内の属性を取り出す

js = soup.find('td')
js['colspan']

これでtdタグ内のcolspan属性にアクセスできる。もし属性がhtml中に記述されていない場合はエラーになる。

最終的にやりたいこと

最終的にやりたいこと

艦これの装備改修関係を表にしてexcelで管理していたけど、面倒になってきた。
そこで艦これwikiの表をPythonから参照し、自動で最新情報になるようにしようと思ったのがきっかけ。
表をpandasのread_htmlで読み込めることはできたけど、rowspanやcolspanのおかげでめちゃくちゃな表になってしまう。
そんでタグやらなんやらいじって整形しなくちゃということでbs4に行きついた。
それでも二番艦で更新先が変わるとかの表記の処理が大変そうな気がする。