【PYTHON】検索順位チェックを自動化【効率化】

どうもこんにちは。今日は検索順位チェックプログラムをPYTHONで作成し、検索順位チェックをバッチファイルで実行。それをタスクスケジューラで毎日実行する。までを自動化しましたので、その内容を記事にします。

検索順位チェックツールは高くて買えない。とりあえず順位が知れたらいい。という方の参考になれば幸いです。

ちなみに私の環境は以下です。

windows10
python 3.8.5

スポンサーリンク

PYTHONのコード

pythonのコードは2つ用意しました。1つにまとめときゃいいんかもしれませんが、それはまぁいいじゃない。てきとーです。まず一つ目はGoogleで検索キーワードの上位100位までのサイトURLをcsvに保存するコードです。これはこちらの記事を参考にしましたので、この記事を見てください。

二つ目はcsvから自分の記事が何位にいるかを整理するコードです。

「~.py 記事URL 記事タイトル」で実行します。例えば、「~.py https~ 【PYTHON】検索順位チェックを自動化【効率化】」みたいに使います。

このコードがやってること

記事URLと記事タイトルの受け取り
csv読み込み
csvのファイル名から検索キーワードを取得
csvの中に自分の記事URLがあるかを検索
順位と日付をメモ
\記事\検索キーワードのフォルダに日付と順位をファイル出力
過去にファイル出力していたら上書き

コード全文は以下です。

#!/usr/bin/env python
# coding: shift_jis

import os
import datetime as dt
import pandas as pd
import csv
import sys
import glob
import shutil
import re

today = dt.date.today()

#記事名と記事URLの受け取り
if len(sys.argv) > 2:
    my_blog_url = sys.argv[1]
    my_blog_title = sys.argv[2]
else:
    print("記事URLと記事名を入力して下さい。")
    sys.exit()

#作成したcsvファイルを取得
csv_file = glob.glob("*.csv")
csv_file_name = "".join(csv_file)
df_csv = pd.read_csv(csv_file_name)

#検索キーワードを抽出
search_keyword = "".join(re.findall("(?<=\[).+?(?=\])", csv_file_name))# ['def']

df = df_csv[df_csv["サイトURL"].str.contains(my_blog_url, na=False)]
df_rank = pd.DataFrame(columns=["日付","順位"])
df_rank.loc[0,"日付"] = today
#順位がランク外の時
if df.empty==1:
    print("「"+my_blog_title+"」の「"+search_keyword+"」での検索順位はランク外です。")
    df_rank.loc[0,"順位"] = 101
else:
    print("「"+my_blog_title+"」の「"+search_keyword+"」での検索順位は"+str(df.iloc[0,0])+"位です。")
    df_rank.loc[0,"順位"] = df.iloc[0,0]


#フォルダがあるかを検索する
path = "/Users/kakit/Documents/blog_rank/[順位]"+my_blog_title
path_keyword = path + "/" + search_keyword
folder_check = os.path.exists(path)
folder_check_keyword = os.path.exists(path_keyword)
#フォルダがない場合はフォルダを作成して順位ファイルを作成
if folder_check == 0:
    os.mkdir(path)#フォルダを作る
    os.mkdir(path_keyword)
    df_rank.to_csv(path_keyword+"/rank.csv",index=False)#csvを作って保存
#フォルダがある場合は既存の順位ファイルに順位を書き込む
else:
    #キーワードフォルダが無い場合はキーワードフォルダを追加して順位ファイルを保存
    if folder_check_keyword == 0:
        os.mkdir(path_keyword)
        df_rank.to_csv(path+search_keyword+"/rank.csv",index=False)#csvを作って保存
    #キーワードフォルダがある場合は既存順位ファイルに順位を書き込む
    else:
        with open(path_keyword+"/rank.csv","a")as f:
            write = csv.writer(f, lineterminator="\n")#改行
            write.writerow(df_rank.loc[0])#ファイルに書き込み

#csvファイルの移動
shutil.move(csv_file_name,path_keyword)

まぁ無駄が多いかもしれませんが、動けばいいんです。

バッチファイルに処理を記述

.batファイルに先ほど説明したPYTHONプログラムを実行するよう記述します。

一つ目のプログラムをrank_check.py。二つ目のプログラムをrank_organize.pyとしました。バッチファイルには

「rank_check.py 検索キーワード」
「rank_organize.py サイトURL サイトタイトル」

と入力してプログラムを実行します。↓私が書いたのはこんな感じです。

@echo off

cd Documents\python\rank_check
python rank_check.py ltspice コンバータ
python rank_organize.py https://kakitamablog.com/post-843/ フォワードコンバータのLTspiceシミュレーション 

python rank_check.py フォワードコンバータ 設計
python rank_organize.py https://kakitamablog.com/post-1035/ 出力24V240Wのフォワードコンバータを設計したので詳細を解説

python rank_check.py ltspice pwm
python rank_organize.py https://kakitamablog.com/post-978/ LM393をLTspiceに追加して、PWMコンパレータをシミュレーションをする

実行したらこんな感じです↓。

タスクスケジューラで自動化

毎回バッチファイル実行するのもめんどくさいので、タスクスケジューラに登録しときます。

毎朝6:05に動くように設定しました。

注意点は「ユーザーがログオンしているかどうかにかかわらず実行する」にして「最上位の特権で実行する」にチェックをいれます。これがないと何か動かなかったです。

パソコンの起動も自動化

ここまでくるとパソコンの電源を入れることすらめんどくさいです。それも自動化しましょう。BIOS画面の設定で自動起動できます。

パソコン起動時にF2やDELETEキーを押してBIOS設定画面で

Wake On RTC Alarmとかいう名前のところをENABLEにして時刻を入力します。私は6:00にしました。

あとはタスクスケジューラでシャットダウンを設定しておけば、完全に自動で毎日実行してくれます。

以上です。何かの参考になれば幸いです。最後までお読みいただきありがとうございした。