python簡単クレイピング練習:競馬の成績結果をCSVで吐き出す

f:id:tamurasann:20190902212148j:plain

PythonでWebの記載情報を簡単に抽出することができるスクレイピングを競馬の成績が記載されている下記のサイトを使って、練習してみました。

 

www.jra.go.jp

コード全体


import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup

url = "http://www.jra.go.jp/datafile/seiseki/g1/feb/result/feb2019.html"
html = urlopen(url)
bsObj = BeautifulSoup(html, "html.parser")
table = bsObj.findAll("table", {"class":"basic narrow-xy striped"})[0]
rows = table.findAll("tr")

for row in rows:
   csvRow = []
   for cell in row.findAll(['td', 'th']):
       tx = cell.get_text()
       tx2 = tx.strip()
       csvRow.append(tx2)

   with open("D:/競馬/" + "data" + ".csv", "a", newline ="", encoding='utf-8_sig') as f:
       writer = csv.writer(f, lineterminator='\n') # 行末は改行
       writer.writerow(csvRow)

 

コード解説

 

各種ライブラリのインポート

import csv:CSVに吐き出すために必要
from urllib.request import urlopen:対象URLにアクセスするために必要
from bs4 import BeautifulSoup:対象URL内のhtmlを分析するために必要

URLへのアクセスと解析・データの指定

url = "http://www.jra.go.jp/datafile/seiseki/g1/feb/result/feb2019.html"
➡対象URLを指定

html = urlopen(url)

➡URLにアクセス


bsObj = BeautifulSoup(html, "html.parser")

➡URLを解析


table = bsObj.findAll("table", {"class":"basic narrow-xy striped"})[0]

rows = table.findAll("tr")

➡URL内のデータがまとめられている部分を指定

リストに情報を入れていく

for row in rows:
csvRow = []
for cell in row.findAll(['td', 'th']):

➡trの中のtd,thの情報を繰り返し抜き出す


tx = cell.get_text()

➡テキストのみにする
tx2 = tx.strip()

➡要らない空白が入っていれば削除

csvRow.append(tx2)

➡リストに追加していく

CSVへの書き込み

with open("D:/競馬/" + "data" + ".csv", "a", newline ="", encoding='utf-8_sig') as f:
writer = csv.writer(f, lineterminator='\n') # 行末は改行
writer.writerow(csvRow)

終わりに

この記事はnoteにも記載しております。また、noteでは別記事もあるのでぜひ、ご参照ください。

note.mu