#はじめに
この記事は「ConoHa Advent Calendar 2021」の第22日目の記事です.今回は,ConoHa上で,Pythonを使ってWEB情報を取得してみようというお話しになります.
#今回のお話
WEB情報を取得する方法はたくさんありますが,今回は最近流行している(ずいぶん前から流行っているかも知れませんが),Pythonという言語を使って,ConoHa上で1日1回実行して,WEBサイトに記載されている情報を取得しようというお話しです.ConoHaは24時間365日ずっと稼働できるVPSなのでこういう用途にはもってこいです.今回は,私が管理しているWEBサイトの情報を取得するということを行いました.
#技術的なお話
少し技術的なお話をしようかと思います.今回は,Pythonという言語を使用して,WEBスクレイピングを行うというお話になります.Pythonでは,いくつかWEBスクレイピングを行う方法がありますが,今回,スクレイピングに使用するPythonのライブラリは,RequestsとBeautiful Soupを使用しています.
#取得するWEBサイト
取得するWEBサイトは私が自作したゲームのデータを1日1回取得することが目的です.ゲームのデータは,次のような構造でWEBサイトに表示されています.サンプルのデータを紹介します.
大当たりAの回数 | 大当たりBの回数 | 大当たりCの回数 | 今日のゲーム数 | 今日の総ゲーム数 | 大当たりAの確率 | 大当たりBの確率 | AとBの合成確率 | 昨日の最終ゲーム数 | 状態 | 勝利ポイント |
---|---|---|---|---|---|---|---|---|---|---|
3 | 2 | 0 | 131 | 564 | 1/188 | 1/282 | 1/112.8 | 25 | - | 266 |
という表の形式になっています.この数字の部分をテキストファイル(csv)で取得して保存することを試みることになります.
#プログラムのお話
Pythonやそれを実行する環境は実装されているものとして今回は環境構築に関する説明は割愛しようと思います.プログラムは以下のような簡単なものになります.
#ライブラリ等を使うためにおまじないを書きます
from os import write
import requests
import datetime
import csv
from bs4 import BeautifulSoup
#前日のデータを保存するために日付を計算しています
dt_now = datetime.date.today()
oneday = datetime.timedelta(days=1)
yesterday = dt_now - oneday
#取得したデータの保存先とファイル名を指定します
f = open('dataloger_' + str(yesterday) + '.csv', 'a+')
writer = csv.writer(f, lineterminator='\n')
csvlist = []
#取得するデータのURLを指定してtextとしてWEBページを読み込みます
html_doc = requests.get("http://...").text
soup = BeautifulSoup(html_doc, 'html.parser')
#表になっている要素を探しに行きます
el = soup.find_all('tr')
#表に書かれているテキストを保存するためのtmpファイルに保存する処理
#複数行ある可能性も考えてループ構造になっています
standing = []
for row in el:
tmp = []
for item in row.find_all('td'):
if item:
tmp.append(item.text)
standing.append(tmp)
#取得したデータを実際にcsvに書き込んでいます
for item in standing:
writer.writerow(item)
実際に取得されたデータはこちらです.
このようなデータが毎日日付が変わったタイミングでcronで設定して取得しています.
#取得したデータは何に使うのか?
このようなデータは1日,2日ではなかなか利用する用途が難しくて,たくさん蓄積する必要があります.このプログラムは今年の夏に作成してそれ以降ずっと実行しているので,もう4ヶ月分データが貯まっています.ConoHaはストレージがたくさん使うことができるVPSなのでどれだけテキストデータを貯めても安心です.これらのデータを統計的な解析をして,例えば,曜日でゲーム数の傾向はあるのか,大当たりの確率はどうかなどを知るきっかけになります.
統計的な解析も少しConoHa上でPythonを使ってやっていますが,それはまた別の機会に書かせていただきます.
#最後に
少し早いですが,今年もConoHaのサービスでいろいろチャレンジすることができました.ダウンタイムもほとんどないので,大変助かっています.これからも積極的に使っていこうと思います.最後に,このはちゃん清楚可愛い(≧∇≦*)!!