推しのいる生活っていいですね。
経緯
プログラミング全体が苦手ですが、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種類あります。不要な方を削除してください。
定期実行のミスが怖いので、子どもに定期的にダブルクリックするアルバイトをさせていました。