以前、「15分おきに楽天ランキングのキャプチャを自動で取る方法」という記事を書きました。
上記方法でもキャプチャできるのですが、下記のことからpythonでキャプチャ取るように修正しました。
- サイズ調整がうまくできていない
- 文字のジャギーが目立つ
pythonとseleniumのインストール
今回は、Windowsでの方法のみ書きます。
Macはもう手元にないので、今後のこのブログはWindowsのみの記述になるかと思います。
pythonのインストールは下記ブログを参考にしました。
Pythonのインストール方法[Windows]
Windowsはpathを通すのが面倒だったりするんですが、チェックを忘れずに入れておけば問題なく動くようになりました。
続いて、seleniumのインストールです。
これは、上記ブログ「Pythonのインストール方法[Windows]」にも記載してありますが、コマンドプロンプトで pip install ライブラリ名 と入力すればインストールできます。
今回は pip install selenium と入力してインストール完了です。
chromeドライバ
chromeドライバを入れます。
Latest Release: ChromeDriver 2.38 のChromeDriver 2.38をクリックします。
OSによって使えるchromeドライバのリストが表示されます。
私はwindows10なのでchromedriver_win32.zipをダウンロードしました。
解凍すると、「chromedriver.exe」ファイルがあるので、任意の位置に格納します。
私は「c:/chromedriver_win32/」に格納しました。
格納先を後ほどpythonプログラムで指定します。
各ファイルの説明
自動キャプチャに必要な各ファイルを作成していきます。
list_dic.csv – キャプチャしたいページリスト
キャプチャしたいリストをcsv形式で作成します。
csvを辞書型で読み込みたいので、1行目は項目名を記述します。
項目名は、pythonプログラムで指定します。
rakutenRank.py – pythonで実行するプログラム本体
import time from datetime import datetime import csv import os from selenium import webdriver from selenium.webdriver.chrome.options import Options import sys #パラメータ取得 args = sys.argv argc = len(args) options = webdriver.ChromeOptions() # 必須 options.add_argument('--headless') options.add_argument('--disable-gpu') # エラーの許容 options.add_argument('--ignore-certificate-errors') options.add_argument('--allow-running-insecure-content') options.add_argument('--disable-web-security') # headlessでは不要そうな機能 options.add_argument('--disable-desktop-notifications') options.add_argument("--disable-extensions") # UA options.add_argument('--user-agent=hogehoge') # 言語 options.add_argument('--lang=ja') # プラウザ起動(Chrome) options.add_argument("--window-size=990, 1036") driver = webdriver.Chrome(chrome_options=options,executable_path="c:/chromedriver_win32/chromedriver.exe") #csvファイル読み込み if argc != 2: csv_file = open("./list_dic.csv", "r", encoding="shift_jis", errors="", newline="" ) else: if args[1] == "dayly": csv_file = open("./list_day_dic.csv", "r", encoding="shift_jis", errors="", newline="" ) f = csv.DictReader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True) folder = datetime.now().strftime("%Y%m%d-%H%M%S-pc") + "/" os.mkdir(folder) # リストからURLをひとつづつ処理 for row in f: #1行目の項目名を指定 TITLE = row['FILE'] URL = row['URL'] # ドメインの一部をファイル名として設定 file_name = TITLE + ".png" # URLを開く driver.get(URL) # ウィンドウサイズとズームを設定 driver.set_window_size(990, 1036) driver.execute_script("document.body.style.zoom='100%'") # 読み込み待機時間 time.sleep(2) # imagesフォルダにスクリーンショットを保存 driver.save_screenshot("./" + folder + file_name) # プラウザを閉じる driver.quit()
rakutenRank.bat – タスクスケジューラで指定するコマンド
デスクトップにtestフォルダを作成して必要なファイルを保存しておきました。
rakutenRank.batというファイル内には下記コマンドを記述しています。
cd C:\Users\ユーザー名\Desktop\test python rakutenRank.py exit
pythonプログラム本体はパラメータ指定で読み込むページリストファイルを変えるよう作りました。
list_dic.csvにはリアルタイムランキングで取得したいURLリストを記述していますが、list_day_dic.csvにはデイリーランキングで取得したいリストを記述しておきました。
リアルタイムランキングは上記コマンドで起動させ、デイリーランキングは下記コマンドで実行可能です。
cd C:\Users\ユーザー名\Desktop\test python rakutenRank.py dayly exit
cronみたいなものを設定
Windowsでは、タスクスケジューラを使用します。
Cortana(コルタナ)の検索窓に[タスク]と入力して、見つかった[タスク スケジューラ]をクリックします。
[タスクスケジューラ ライブラリ]を右クリック→[タスクの作成]をクリックします。
[全般]タブの名前は任意名を記載します。
ユーザーログオンしていないときも動いてほしかったので、[ユーザーがログオンしているかどうかにかかわらず実行する]を選択しました。
[トリガー]タブに詳細の日時を記載します。楽天のリアルタイムランキングは15分おきに更新されるので、繰り返し間隔を[15分間]に設定します。
これで15分おきに楽天ランキングのキャプチャを取ることに成功しました。
お疲れ様です。