Python初心者:ブログ検索順位取得ツールついに完成(?)

2019 11/25
Python初心者:ブログ検索順位取得ツールついに完成(?)

ついに、ついにブログ検索順位取得ツールが完成しました(!?)

(?)は、まだ追加したい機能もあるものの、「もう十分じゃない?」という思いから。

一時はやる気をなくしてPythonから離れていましたが、なんとか完成までくることができました。

今回は、今までのまとめ、前回の記事から追加した部分、そしてツールのソースコード全部載せでお送りします。

目次

作りたいもの

作りたい『ブログ検索順位取得ツール』の主な機能をあげますと

  • GUI操作でExcelファイルを選択する
  • Excelにある検索キーワード一覧を読み込む
  • 検索キーワードをGoogle検索する
  • Google検索結果の中に、当ブログが入っているかチェックする
  • ブログの順位と記事タイトル・URLをExcelに記入する
  • 検索キーワードと順位を表形式でGUI画面に表示する
  • チェックを入れたキーワードの順位変動をグラフにする
  • チェックは全選択、全選択解除を可能にする

GUI画面のイメージ図です。

作りたい画面
ツールの概要図

Excelファイルのフォーマットは以下のようにしました。
「検索ワード」シートに検索したいキーワードを書いておきます。
「検索順位」シートに検索でヒットした記事のURLとタイトル、順位を記載していきます。

Excelファイルのキーワード一覧
検索キーワード一覧シート
検索順位シート
検索順位シート

これまでの道のり(9記事)

Pythonで作りたい機能が全部実装できるか分からないまま見切り発車したのですが、なんやかんやありまして、形になってきました。
その経緯は以下の9記事に書いてあります。

その1:Pythonの導入からのGoogle検索

あわせて読みたい
Python超初心者:Google検索するプログラムを作る
Python超初心者:Google検索するプログラムを作るPythonを始めたばっかりの超初心者が、Pythonの導入からGoogle検索するプログラムを作るまでを紹介します。

その2:Google検索結果の取得

あわせて読みたい
Python超初心者:Google検索結果を取り出すのに苦戦⇒ブラウザを模擬せよ!
Python超初心者:Google検索結果を取り出すのに苦戦⇒ブラウザを模擬せよ!Python超初心者がブログ検索順位取得ツールを作ろうと模索中。Google検索した結果から記事タイトルとURLを取り出すコードを書いたものの、うまくいかない。原因はHTMLのclassが変換されていたためであった。ブラウザを模擬することで解決した。

その3:検索結果からURLとタイトルを取り出す

あわせて読みたい
Python超初心者:リストを部分一致検索して要素を取得
Python超初心者:リストを部分一致検索して要素を取得PythonでGoogle検索結果をリストで取得し、その中から自分のブログのURLを検索して順位を取得するプログラムを作成しました。URLを部分一致(前方一致)で検索します。

その4:Excelファイルを読み込む

あわせて読みたい
Python超初心者:PythonでExcelファイルを読み込む
Python超初心者:PythonでExcelファイルを読み込むPython超初心者が、PythonでExcelファイルを読み込むプログラムを作成してみました。openpyxlのインストール、Excelの読み込み、「DeprecationWarning」の警告の消去を実践。

その5:Excelファイルに書き出す

あわせて読みたい
Python初心者:検索結果をExcelファイルに書き出す
Python初心者:検索結果をExcelファイルに書き出すpythonでブログの検索順位を取得するツールを作成しています。検索順位を取得した結果をExcelファイルに書き出す部分を作成してみました。見た目が良くなるように、文字列操作も行っています。

その6:Matplotlibでグラフを作ってみる

あわせて読みたい
Python初心者:Matplotlibでグラフを作ってみる
Python初心者:Matplotlibでグラフを作ってみるPythonでMatplotlibを使ってグラフを作成してみました。軸や目盛り、グリッドの設定をして好みのグラフになるようにカスタマイズしてみました。

その7:tkinterでファイル選択ダイアログを表示

あわせて読みたい
Python初心者:tkinterでGUI作成~ファイル選択ダイアログ編~
Python初心者:tkinterでGUI作成~ファイル選択ダイアログ編~Python初心者がブログの検索順位取得ツールを作るために、tkinterを使ってGUI作成にチャレンジしてみました。ボタンを追加してファイル選択ダイアログを表示させ、選択されたファイルのパスを取得します。

その8:tkinterでチェックボックス入りの表とスクロールバーを表示

あわせて読みたい
Python/tkinter チェックボックス入りの表とスクロールバー
Python/tkinter チェックボックス入りの表とスクロールバーPython tkinterで表の表示をさせたい。表にチェックボックスを埋め込みたい。表にスクロールバーを付けたい。これを簡単に実装する方法がなかったので、自作しました。

その9:複数チェックボックスの制御

あわせて読みたい
Python/tkinter 複数チェックボックス(Checkbutton)の制御
Python/tkinter 複数チェックボックス(Checkbutton)の制御Python tkinterを使ってブログの検索順位取得ツールのGUIを作成しています。表の中に設置された複数のチェックボックス(Checkbutton)の動作部分のコードを作りました。初期値を宣言する場所によってはチェックボックスが連動してしまうので注意。
スポンサーリンク

追加した機能(グラフ作成ボタンの機能)

前回の記事から追加したのは、グラフ作成ボタン機能です。

「make plot」ボタンを押すと、チェックしてあるキーワードの順位をグラフに表示する

これにおいて、以前は日本語表示はしないからイイやと思っていたのですが、グラフの凡例に日本語の表示が必須となってきたので、Matplotlibの日本語化も行いました。

「make plot」ボタンが押された際に呼び出される関数を、以下のように書きました。

47~51行目で凡例の設定をしています。

まだ追加していない機能(今後入れるかも)は、「スクロールバーをマウス操作できるようにする」ことです。
今は後回しにしています。

ツール実行の様子

ツールの画面や実行の様子をご紹介します。

ブログ順位のアップデート

ブログの順位を取得する部分について、画面を紹介します。

以下のように表形式で、一番左にチェックボックスを付けてExcelファイルの中身を表示しています。

画面に表示される順位は、一番最後に検索した日付の順位です(Excelの一番右のセルの値をもってきている)。

ファイル読み込み時の画面
ファイル読み込み時の画面

「Update Rank」ボタンをクリックしてしばらくした後の画面は以下のようになります。

ブログ順位アップデート後の画面
ブログ順位アップデート後の画面

ブログの順位をアップデートし、順位が上がっていたら赤で「↑」も追加します。
逆に順位が下がっていたら青で「↓」を追加。
順位が前回と同じなら黒で「->」を追加して表示します。

また、50位以内にブログ記事がない場合は「None」と表示するようにしました。

グラフ作成

グラフはメインのGUI画面に埋め込むのではなく、別ウィンドウでそのまま表示させています。

こちらはGIF動画でご覧ください。

(Python/tkinter/Matplotlib)チェックされたキーワードの順位変動をプロットするGIF動画
チェックされたキーワードの順位変動をプロットするGIF動画

こんな感じでグラフが作成されます。

ひとまず、イメージしていたツールの機能が備わりました!

スポンサーリンク

ブログ検索順位取得ツールのソースコード全部載せ

長いので関数ごとに区切って載せますね。

あと、自分のみ使用すること前提で作っており、必要なエラー対策とかしていませんので、参考にする際はご注意ください。

さらに注意点として、ブログのプラグインの影響で、「<」「>」が文字化けしています。
心の目で、おそらく「<」だろうと感じてください。

なんとか対応しろよというご指摘はごもっともですが、上手くいかなかったので放置しています(汗)

メイン

ファイル選択ボタンの関数

Excelファイル読み込み関数

GUI上に表を作成する関数

検索順位アップデートボタンの関数

注意点として、1回の検索ごとに1分間sleepを入れています(44~45行目)。
そうしないと、検索数が多くてGoogle様に怪しまれ、検索できなくなってしまいます。
30秒待ちだと40件くらいの検索が限界でしたので、今は60秒待ちにしています。

スポンサーリンク

Google検索する関数

検索順位をExcelに書き込む関数

プロット作成ボタンの関数

上で紹介したプロット作成のと同じです。

プロットするデータの取得関数

その他(画面サイズ変更、チェックボックス制御)


ふぅ。

けっこう長くなったつもりでしたが、ざっと500行ほどのコードでした。
Python初心者でも、ネットで調べながら、これくらい作れました。

いまのところきちんと動いています。

何かご指摘やコメントがあればお気軽にお願いします☆

次は何を作ろうかな~

んじゃ、また~

関連記事

応援よろしくお願いします☆

コメント

コメントする

目次