LoginSignup
0
3

More than 1 year has passed since last update.

特定のサイトにあるテーブルの中身をCSVに書き出したい

Last updated at Posted at 2022-09-29

推しのいる生活っていいですね。

経緯

プログラミング全体が苦手ですが、Pythonは特に苦手です。というのもタブで揃えるのがすごく嫌いなので使いたくないのですが、とあるライバーのイベントにはまってしまい、ランキングを適宜取得してその変化をエクセルで見たかったので慌てて作成しました。

感想

Python面白い!Webスクレイピングは2度目くらいだけど、いざというとき便利だなあ〜

定期実行はやってません

cronとかで自動実行してもいいんだけど、設定間違えるとトラフィックを増やして迷惑をかけることになるので、手動実行をしています。

ファイル名にタイムスタンプをつけてます

どの時点で取得したデータかわかるように、ファイルにタイムスタンプをつけています。

このコードのダメな点

増えたデータ(実行回数分ファイルが作られます)はエクセルでなんとか処理すればいいやって姿勢。本当は1つのファイルに追記していくのが美しいのだろうけど。次のイベントに進出したらかんがえる。

参考にしたサイト(追記予定)

コード

test.py
import csv
import datetime
from urllib.request import urlopen
from bs4 import BeautifulSoup

def table_to_csv(file_path, url, selecter):
    html = urlopen(url)
    soup = BeautifulSoup(html, "html.parser")

    # tableタグを選択
    table = soup.findAll("table", selecter)[0]

    trs = table.findAll("tr")
    # csv書き始めましょう的な意味かな?
    csv_file = open(file_path, 'wt', newline = '', encoding = 'utf-8')
    csv_write = csv.writer(csv_file)

    for tr in trs:
        csv_data = []
        # 1行ごとにtd, tr要素のデータを取得してCSVに書き込み
        for cell in tr.findAll(['td', 'th']):
            csv_data.append(cell.get_text())
        csv_write.writerow(csv_data)

    # 書き込み終わり
    csv_file.close()

# URLを指定
url = '(ここにURL)'

# セレクタ(今回は取得したいテーブルのクラス名を使いました。mt-4 col-12 みたくスペース込みでも動作していました)
selecter = {"class":"table-mytable"}

# 現在時刻の取得
now = datetime.datetime.now()

# CSV保存用にファイルパスとファイル名を指定

# ファイル名の指定(Windows)
filename = 'C:\\Users\\(あなたのユーザ名)\\' + now.strftime('%Y%m%d_%H%M%S') + '.csv'
# ファイル名の指定(Macの場合はこちら)
filename = '/Users/(あなたのユーザ名)/' + now.strftime('%Y%m%d_%H%M%S') + '.csv'

# table_to_csvを実行
table_to_csv(filename, url, selecter)

Macで作って、Windowsで実行した関係でパスが2種類あります。不要な方を削除してください。
定期実行のミスが怖いので、子どもに定期的にダブルクリックするアルバイトをさせていました。

0
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
0
3