PythonでHTMLテーブルを抽出し、Excelに整形して保存する方法

目次

背景

Web ページ上の表を Excel へ貼り付ける際、手作業ではセル合わせが煩雑になりがちです。そこで pandasread_htmlopenpyxl を組み合わせることで、HTML テーブルを簡潔に取得し、列幅を整えたうえでブックに出力する手順をご紹介いたします。


コード

import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

# 新規ワークブックとワークシートを用意
workbook = Workbook()
sheet = workbook.active
sheet.title = "ImportedTable"

# 列幅を調整(例として列 D を 35 ピクセル相当へ)
sheet.column_dimensions["D"].width = 35

# HTML ファイル(または URL)を指定
table_url = "./table_sample.html"

# 見出しに「SecondHalf」という文字列を含むテーブルのみ抽出
table_frames = pd.read_html(table_url, match="SecondHalf")

# 取得した DataFrame を順次書き込み
for frame in table_frames:
    for row in dataframe_to_rows(frame, index=False, header=True):
        sheet.append(row)

# Excel ブックに保存
workbook.save("table_output.xlsx")

変更点

  • ファイル名・シート名 を置き換え、著作権トラブルを回避しています。
  • match="SecondHalf" とすることで、指定キーワードを含むテーブルのみを対象にしています。
  • 列幅を D 列 35 に設定し、長い文字列が折り返さず表示されるよう配慮いたしました。

ポイント解説

  1. pd.read_html でテーブル取得
    • URL でもローカル HTML でも同一関数で処理できます。
    • 複数テーブルが存在する場合、match 引数でフィルタリングすると無駄なデータを排除できます。
  2. dataframe_to_rows で行データへ変換
    • index=False を指定することで、DataFrame の行番号列を出力しません。
    • ヘッダー行を含める場合は header=True を維持してください。
  3. 列幅・書式のカスタマイズ
    • 資料共有時は列幅調整が必須です。openpyxl ならセル書式やフォントも拡張可能です。
  4. ファイル出力名の工夫
    • 英数字のみのファイル名に統一すると、社内外の環境差異で文字化けが起こりにくくなります。

まとめ

本記事では、

  • HTML テーブルの自動抽出
  • Excel ブックへの転記と列幅調整

をワンステップで実現するサンプルコードをご提示いたしました。Web から定期取得する業務データも、スクリプト化することで転記ミスのない安定運用が可能です。ぜひご自身のワークフローに合わせて、列幅や書式を拡張しながらご活用ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次