日記/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は使えなかった。残念。