日記/2019-2-28
最終更新時間:2019年02月28日 05時38分41秒
Googleカレンダーにプロ野球の日程をインポートするためスクレイピング・続
一昨日、Googleカレンダーにプロ野球の日程をインポートする方法を紹介したが、Pythonのことをよく知らない私は、世の中にはpandasという便利なモノがあることを知らなかった。これを用いてスクリプトを書き直してみたら、かなりすっきり書くことができて満足。でも、まあ、これまた習作ということで。
#!/usr/bin/python3 #coding: utf-8 #scrapingnpb2.py import sys import re import datetime import pandas import pprint print("Subject, Start Date, Start Time, End Date, End Time, Description, Location") months = ['03', '04', '05', '06', '07', '08', '09'] # 0, 1, 2, 3, 4, 5 #(0, '3/29(金)', 'DeNA - 中日', '横\u3000浜 18:30', nan, nan) for month in months: url = "http://npb.jp/games/2019/schedule_" + month + "_detail.html" tb = pandas.io.html.read_html(url) for row in tb[0].itertuples(name=None): card = '' md = re.sub(r'(.*)', '', row[1]) ymd = '2019/' + md sttm = '' entm = '' place = '' if row[2] == row[2]: card = re.sub(' - ', '対', row[2]) if row[3] == row[3]: place_time = row[3].split(' ') if len(place_time) > 1: (sthr, stmn) = place_time[1].split(':') (mon, day) = md.split('/') start = datetime.datetime(2019, int(mon), int(day), int(sthr), int(stmn), 0) delta = datetime.timedelta(minutes=200) end = start + delta sttm = start.strftime("%H:%M:%S") entm = end.strftime("%H:%M:%S") place = re.sub(r'\s+', '', place_time[0]) else: sttm = '18:00:00' entm = '21:20:00' place = place_time[0] if len(sys.argv) > 1: m = re.search(sys.argv[1], card) if m: print(f"{card}, {ymd}, {sttm}, {ymd}, {entm}, {card}, {place}") elif card != '': print(f"{card}, {ymd}, {sttm}, {ymd}, {entm}, {card}, {place}")
使い方は「./scrapingnpb2.py」、もしくは「./scrapingnpb2.py 阪神」という風に球団名を与える。何も与えないとすべての日程が、球団名を与えるとその球団のみの日程が出力される。
出力結果をcsvファイルとして保存し、GoogleカレンダーにインポートすればOK。
阪神タイガースの公式サイトの試合日程のページはtableタグが使われていないため、安直にpandasは使えなかった。残念。