三色団子のブログ

気になったこと、気にしてること、やったことの三色でお送りします

【Python3】プロ野球の試合別の得失点をスクレイピングで取得する

プロ野球の様々な検証を行うために、NPBの公式サイトからスクレイピングで試合別の得失点を取得した。
使用言語はPython3。

実際のコード

# coding: UTF-8
import urllib.request
from bs4 import BeautifulSoup
import csv

team1 = list()
team2 = list()
score1 = list()
score2 = list()

for i in range(4,11):
    if i < 10:
        url = f"http://npb.jp/games/2017/schedule_0{i}_detail.html"
    else:
        url = f"http://npb.jp/games/2017/schedule_{i}_detail.html"

instance = urllib.request.urlopen(url)
soup = BeautifulSoup(instance, "html.parser")

    elems_t1 = soup.select(".team1")
    elems_t2 = soup.select(".team2")
    elems_s1 = soup.select(".score1")
    elems_s2 = soup.select(".score2")
    for elem_t1 in elems_t1:
        team1.append(elem_t1.text)
    for elem_t2 in elems_t2:
        team2.append(elem_t2.text)
    for elem_s1 in elems_s1:
        score1.append(elem_s1.text)
    for elem_s2 in elems_s2:
        score2.append(elem_s2.text)

with open('t1.csv','w') as f:
    writer = csv.writer(f, lineterminator = ',')
    print(team1)
    writer.writerow(team1)

with open('t2.csv','w') as f:
    writer = csv.writer(f, lineterminator = ',')
    print(team2)
    writer.writerow(team2)

with open('s1.csv','w') as f:
    writer = csv.writer(f, lineterminator = ',')
    print(score1)
    writer.writerow(score1)

with open('s2.csv','w') as f:
    writer = csv.writer(f, lineterminator = ',')
    print(score2)
    writer.writerow(score2)

このコードを使うと、チーム名と各試合の得点数をcsvに出力できる。

問題点

試合が中止になった場合、チーム名は取得されるが得点数は取得できない。
したがって、取得したcsvを手動で修正しないと、上手く紐づけが出来ない。
解決策があれば教えて下さい。

広告を非表示にする