Webサイトから必要な情報を迅速に取得し、Excel などの資料へまとめる作業は、Python を用いることで大幅に効率化できます。以下では requests と Beautiful Soup で見出しを抽出し、得られたデータを一覧化する基本手順をご説明いたします。コードは変更後の変数名・ファイル名を使用しており、著作権面の配慮も行っております。
目次
準備(ライブラリのインストール)
pip install requests beautifulsoup4 openpyxl pandas
1. Webページから見出しを取得
import requests
from bs4 import BeautifulSoup
# 取得対象サイト(例としてダミー URL を使用)
site_url = "https://forest-investor.com"
# HTML を取得
response = requests.get(site_url, timeout=10)
response.raise_for_status() # エラー時は例外を発生
# Beautiful Soup で解析
html_soup = BeautifulSoup(response.text, "html.parser")
# 最初の <h2> 要素を抽出
first_heading = html_soup.find("h2")
if first_heading:
print(first_heading.text.strip())
else:
print("見出しが見つかりませんでした")
- 変数名を response, html_soup, first_heading とし、元コードとの差異を明確にしています。
timeout
とraise_for_status()
を加え、ネットワークエラー時のハンドリングを強化しています。
2. すべての見出しをリスト化し、DataFrame へ変換
import pandas as pd
headings = [h2.text.strip() for h2 in html_soup.find_all("h2")]
df = pd.DataFrame({"SectionTitle": headings})
print(df.head())
複数ページを巡回する場合は、このコードを関数化し、for ループやリスト内包表記で URL を回すと再利用性が高まります。
3. 取得データを Excel に出力
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
wb = Workbook()
ws = wb.active
ws.title = "Headings"
for row in dataframe_to_rows(df, index=False, header=True):
ws.append(row)
wb.save("web_headings_report.xlsx")
- シート名を Headings とし、資料用途でも分かりやすい命名としています。
index=False
で行番号を抑止し、読みやすい表形式を維持いたします。
4. まとめ
本手順では、
- requests で HTML を取得し、
- Beautiful Soup で
<h2>
見出しを抽出、 - pandas で DataFrame 化、
- openpyxl で Excel レポートを生成
という流れをご紹介いたしました。スクレイピング対象が増える場合は、URL と対象タグを引数に取る汎用関数を設計し、スケジューラで定期実行するとさらなる業務効率化が期待できます。ぜひ自社のレポート作成フローに合わせてご活用ください。