Part2:【ファイル付】競艇の成績データ20回分をCSVにまとめる。(繰り返し処理)

f:id:tamurasann:20190907095724p:plain

pythonを使って、競艇の成績データをCSVへ吐き出すPart2です。今回はfor文を使って、繰り返し処理を行い、一気に大量データを取得します。

前回記事

 

www.netachoo.work

 

今回も下記のURLに記載されている情報をpythonを使って、CSVへ吐き出すのですが、

この情報は1大会に過ぎないのです。なので今回は20大会分の成績をfor文を使って、大量取得していきます。

 

f:id:tamurasann:20190903232102p:plain

www.boatrace.jp

 

結果

f:id:tamurasann:20190907100237p:plain

 

CSVに吐き出すと上記のような形となりました。

 

drive.google.com

 

コード全体

 


import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd

#titleの取得
url = "https://www.boatrace.jp/owpc/pc/data/record/listdetail?category=2600&record_no=1"
html = urlopen(url)
bsObj = BeautifulSoup(html, "html.parser")

title = bsObj.findAll("tr", {"class":"is-fs14"})[0]
title_text = title.get_text()
title_split = title_text.splitlines()

#titleをファイルへ書き込む
with open("D:/競艇/" + "data" + ".csv", "a", newline ="", encoding='utf-8_sig') as f:
    writer = csv.writer(f,lineterminator='\n') 
    writer.writerow(title_split)

#繰り返しcontentsの取得
for i in range(1, 21, 1):
    url = "https://www.boatrace.jp/owpc/pc/data/record/listdetail?category=2600&record_no="+ str(i)
    html = urlopen(url)
    bsObj = BeautifulSoup(html, "html.parser")
    
    
#contentsの取得
    for i in bsObj.findAll("tr", {"class":"is-p10-0"}):
        contents_text = i.get_text()
        contents_split = contents_text.splitlines()

#contentsをファイルへ書き込む
        with open("D:/競艇/" + "data" + ".csv", "a", newline ="", encoding='utf-8_sig') as f:
            writer = csv.writer(f,lineterminator='\n') # 行末は改行
            writer.writerow(contents_split)

#ファイルの編集
df = pd.read_csv("D:/競艇/" + "data" + ".csv", header=None)
df2 = df.drop(df.columns[[0, 11]], axis=1)
df2.to_csv("D:/競艇/" + "data" + ".csv", encoding="utf-8_sig")

コード解説

大部分は前回と同じですので前回をご参考ください。

 

www.netachoo.work

 

今回の大きな変更は単純に以下のfor文を追加したことです。

 

for i in range(1, 21, 1):

url = "https://www.boatrace.jp/owpc/pc/data/record/listdetail?category=2600&record_no="+ str(i)

 

i変数に1から始まり、21まで終わる数値を入れ込みます。

URLは最後のno=の後の数字が変わるだけでOKでしたのでその変数iをURLの str(i)の部分、最終末に入れるだけです。

 

https://www.boatrace.jp/owpc/pc/data/record/listdetail?category=2600&record_no=1

https://www.boatrace.jp/owpc/pc/data/record/listdetail?category=2600&record_no=2

 

終わりに

天候や大会名についてはまた、案外難しそうなのでまた、Part3に持ち越しです。。

また、下記のnoteにもはてなブログでは書けない記事も書いておりますのでぜひ、ご参照ください。

note.mu