なろう分析記録

『小説家になろう』をふくめ『ネット小説投稿サイト』を分析する。コード置き場,主にPython,javascript,たまに創作。

【Pythonサンプルコード】webページに含まれる全ての表データを1つのエクセルファイルに保存する【Pandas】

webページの表データをエクセルファイルとして取得する

webページに含まれる「表データ」を取得したいという場面はたまにあるかと思います。
その様な場面の時のために、URLを指定するだけで、指定したページに存在する全ての表データを1つのエクセルファイルに保存するPythonコードを紹介したいと思います。

f:id:karupoimou:20190728034023p:plain:w400
取得元
f:id:karupoimou:20190728033936p:plain:w400
取得例

準備 : pip

pip install pandas
pip install requests

サンプルコード

#webページに含まれる全ての表データを1つのエクセルファイルに保存する

import pandas as pd
import requests

# 保存ファイル名の指定
file_name="web_page_data.xlsx"

# webページのURL
url="https://ja.wikipedia.org/wiki/%E5%9B%BD%E3%81%AE%E4%BA%BA%E5%8F%A3%E9%A0%86%E3%83%AA%E3%82%B9%E3%83%88"


# htmlの取得
headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"}
response = requests.get(url=url, headers=headers)
html = response.content

def export_xlsx():
    df = pd.read_html(html)

    with pd.ExcelWriter(file_name) as writer:
        for i in range(len(df)):
            df[i].to_excel(writer, sheet_name="Sheet%s"%str(i+1))

#関数の実行
export_xlsx()
print("end")

取得サンプル

使い方

URLを書き換えるだけで、大抵のページ対して使えます。

ただし、tableタグではなくdivタグで表を表現しているページに対しては使えませんのでご注意ください。

参考までに、Wikipediaのページに対してはほとんど使えます。

解説

「requests」モジュールでヘッダーを偽装しているので、ヘッダーが無いとお断りされるページに対しても使うことができます。
もし年齢確認ページなどのcookie認証が必要なページを対象とする場合は、ヘッダーにcookieを追加することでお断り回避が可能となります(たぶん)

karupoimou.hatenablog.com

作例

mirunovel.com