2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

[Python]スクレイピングして、必要な情報を加工してからcsv出力

Posted at

はじめに

ある公式リリースノートから

  • 情報取得
  • 抽出・加工
  • 一覧形式でcsv出力

したかったので、Pythonで作成しました。ETLのようなイメージです。
URLを載せると万が一アクセス集中した場合に迷惑がかかるので、対象は伏せます。

スクレイピングする際は、アクセス数に注意

私もまずはブラウザで閲覧してHTMLをダウンロードしてから、ローカル内で試行錯誤しています

成果物

EtlReleasenote.py
import requests
import csv
from bs4 import BeautifulSoup

# please change this setting
VERSION_LIST=["xxx","yyy","zzz"]


HEADER = ['version','Type','description']
# Webページを取得して解析する
for VERSION in VERSION_LIST:
    load_url = f"https://${URL}/xxx/{VERSION}.html"
    html = requests.get(load_url)
    soup = BeautifulSoup(html.content, "html.parser")

    with open('ReleaseNoteLists.csv', 'a', encoding='utf-8') as f:
        writer = csv.writer(f, lineterminator="\n")
        writer.writerow(HEADER)
        for elements in soup.find_all(class_="${className}"):
            for element in elements.find_all("li",recursive="False"):
                h3 = elements.find('h3')
                row = [VERSION,h3.text,element.text]
                writer.writerow(row)

解説・ポイント

HTMLの欲しい要素のみ抽出

find,find_allを利用して、欲しいHTMLの要素を抽出している

        for elements in soup.find_all(class_="${className}"):
            for element in elements.find_all("li",recursive="False"):
                h3 = elements.find('h3')

(漫画でスクレイピング分かりやすい)

文字列中に変数を代入(f-strings

f-stringsを利用すると、以下のように変数に代入する文字列に変数を利用できる。

    load_url = f"https://${URL}/xxx/{VERSION}.html"

csv出力

Header付csv出力は以下あたりで実装している

import csv
HEADER = ['version','Type','description']
    with open('ReleaseNoteLists.csv', 'a', encoding='utf-8') as f:
        writer = csv.writer(f, lineterminator="\n")
        writer.writerow(HEADER)
                writer.writerow(row)        

csv出力結果の空行詰める

csvの出力結果に空行が入ってしまったので、以下のように記述

        writer = csv.writer(f, lineterminator="\n")

参考記事

2重ループうまくいかなかった時に助かりました

おわりに

最後まで見てくれてありがとうございます。
よかったらチャンネル登録(フォロー)と高評価(いいね:heart_decoration:)お願いします:pray:
週一で投稿目指してます。もしフォローかいいね:heart_decoration:をしてくれたら、やる気出るので、次週は投稿することを約束します。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?