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