概要
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