LoginSignup
0
5

More than 1 year has passed since last update.

【Python】馬の競走成績情報をエクセルに出力してみた

Last updated at Posted at 2022-11-27

概要

pythonで馬の競走成績情報をWEBスクレイピングしてGoogleスプレッドシートに出力する処理を作ってみました。

前提条件

Pythonが既にインストールされていること。
Google Cloud PlatformのAPIライブラリにアクセスして下記のインストールが終わっていること。
(詳しくはGoogle Spread Sheets に Pythonを用いてアクセスしてみたを参考にしてください)
「requests」と「beautifulsoup4」がインストールされていること。
【【Python】WEBスクレイピングした結果をエクセルに出力してみたの続編です。)

gspreadとoauth2clientの導入

コンソールを開いて下記のコマンドを実行して「gspread」と「oauth2client」をインストールする。

pip install gspread
pip install oauth2client

Googleスプレッドシートに出力する処理の実装

作成した馬の競走成績情報をGoogleスプレッドシートに出力する処理のプログラムは下記になります。

import gspread
import json
import requests
from bs4 import BeautifulSoup
import openpyxl
import time

#ServiceAccountCredentials:Googleの各サービスへアクセスできるservice変数を生成します。
from oauth2client.service_account import ServiceAccountCredentials 

#2つのAPIを記述しないとリフレッシュトークンを3600秒毎に発行し続けなければならない
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

#認証情報設定
#ダウンロードしたjsonファイル名をクレデンシャル変数に設定(秘密鍵、Pythonファイルから読み込みしやすい位置に置く)
credentials = ServiceAccountCredentials.from_json_keyfile_name('./秘密鍵のファイル名.json', scope)

#OAuth2の資格情報を使用してGoogle APIにログインします。
gc = gspread.authorize(credentials)

#共有設定したスプレッドシートキーを変数[SPREADSHEET_KEY]に格納する。
SPREADSHEET_KEY = 'XXXXXXXXXXXXXX'

#共有設定したスプレッドシートのシート1を開く
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1

#A1セルの値を受け取る
import_value = worksheet.acell('A1').value

url = import_value
html = requests.get(url)
soup = BeautifulSoup(html.content, "html.parser")

#列項目を入力する
retu_list = ['日付','開催場所','天気','馬番','着順','騎手','距離','馬場','タイム','上り']

row = 1
line = 4
write_row = 1

for i in retu_list:
    worksheet.update_cell(3,row,i)
    row = row + 1

row = 1

# すべてのtbodyタグを検索して、その中のさらにtdタグを検索してその文字列を表示する
for element in soup.find_all("tbody"):
    for element2 in element.find_all("td"):
        if row < 28:
            if row in (1,2,3,9,12,13,15,16,18,23):
                worksheet.update_cell(line,write_row, element2.text.strip())
                row = row + 1
                write_row = write_row + 1
                # 書き込み速度に制限があるためsleep関数で書き込み間隔を調整
                time.sleep(1)
            else:
                row = row + 1
        else:
            row = 1
            write_row = 1
            line = line + 1
            worksheet.update_cell(line,write_row, element2.text.strip())  
       

■処理内容
・SPREADSHEET_KEY = 'XXXXXXXXXXXXXX'について
「XXXXXXXXXXXXXX」に当たる箇所は出力したいgoogleスプレッドのURLにある
https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXX/edit#gid=0
                       ↑
                     この部分になります。

・time.sleep(1)について
自分が設定しているgspreadの設定上1分間にアクセスできる回数に制限があるため1秒間の実行間隔を設けてます。

実行結果

今回の対象は下記のURLになります。
https://db.netkeiba.com/horse/2017105082

実行後のエクセルは下記になります。
キャプチャ.JPG

0
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
5