PythonでGoogle検索の検索順位チェック用ツールを作ってみた
みなさまおはこんばんにちは、せなです
今回はGoogle検索の検索順位を確認するために簡単なツールを作ったので公開したいと思います
始めに
※このプログラムは改良途中です
xlsxファイルの「A2」にURLを記述して使用してください(空ファイルだと崩れます)
今後はKivyとか使ってインターフェースから操作できるようにしたりとか、グラフで確認できるようにしたりとかする予定です
私が個人的に使おうと思って作っているので、使い方とかはユーザーフレンドリーではないと思います
参考程度に見てもらえると嬉しいです
開発環境
Windows10
Python3.7
bs4
openpyxl
openpyxlの使い方は下の記事を参考にどうぞ
リンク:openpyxlを使用してPythonでExcelファイルを操作する
ソースコード
始めにソースコードを載せておきます
後ほど簡単に説明をさせていただきます
import bs4
import requests
import json
import re
import openpyxl
import datetime
wb = openpyxl.load_workbook('ranking.xlsx')
ws = wb['Sheet']
ini_column = ws.max_column + 1 # Initial column+1
# Google Index 50 Ranking Get or Not Rank
def search_index(url, keywords):
for key_word in keywords:
search_url = 'https://www.google.co.jp/search?hl=ja&num=50&q=' + key_word
google_res = requests.get(search_url)
google_res.raise_for_status() # 200チェック
google_bs4 = bs4.BeautifulSoup(google_res.text, 'html.parser')
prototype_urls= [i.parent.get("href") for i in google_bs4.findAll('div', class_='BNeawe vvjwJb AP7Wnd')]
urls = [re.sub(r'/url\?q=|&sa.*', '', x) for x in prototype_urls]
if urls.count(url) != 0:
return urls.index(url)
else:
return 'Not Rank'
# Excel URL & KeyWord & Ranking Added
def excel_url_add(url, keyword, rank):
for word in keyword:
if excel_url_search(url, word):
local_row = ws.max_row + 1
ws['A' + str(local_row)] = url
ws['B' + str(local_row)] = word
rank_row = excel_keyword_position(word)
ws[ws.cell(row=rank_row, column=ini_column).coordinate] = rank
# Excel Date Added
def excel_date_add():
ws[ws.cell(row=1, column=ini_column).coordinate] = datetime.date.today()
# Excel URL KeyWord Search Hit=NewURL & KeyWord Added
def excel_url_search(url, keyword):
url_list = [cell.value for cell in ws['A']]
keyword_list = [cell.value for cell in ws['B']]
if url_list.count(url) != 0 and keyword_list.count(keyword) != 0: # url or keyword Not List count then True
return False
else:
return True
# Excel Keyword Position Get
def excel_keyword_position(keyword):
keyword_list = [cell.value for cell in ws['B']]
keyword_row = keyword_list.index(keyword) + 1
return keyword_row
def main():
with open('keyword.json', 'r', encoding='utf-8_sig') as file:
keyword_json = json.load(file)
excel_date_add()
for key, value in keyword_json.items():
url_index = search_index(key, value)
excel_url_add(key, value, url_index)
wb.save('ranking.xlsx')
if __name__ == '__main__':
main()
ソースコードを簡単に解説
search_index()
search_url = 'https://www.google.co.jp/search?hl=ja&num=50&q=' + key_word
google_res = requests.get(search_url)
google_res.raise_for_status()
見ての通り50位以内のgoogle検索情報を取得してます
raise_for_status()はレスポンスが正常かのチェックですね
google_bs4 = bs4.BeautifulSoup(google_res.text, 'html.parser')
bs4.BeautifulSoup()でgoogle検索結果から取得したgoogle_res.textのhtml情報を取得しています
それをgoogle_bs4に代入しています
prototype_urls = [i.parent.get("href") for i in google_bs4.findAll('div', class_='BNeawe vvjwJb P7Wnd')]
google_bs4.findAll()でdivの中からclassに指定したものと合致するのを「i.parent.get(“href")」でurl情報を取得します
urls = [re.sub(r'/url\?q=|&sa.*', '', x) for x in prototype_urls]
取得したurl情報を正規化したのちに情報を取得する
if urls.count(url) != 0:
これは見ての通りです
google検索に自分のurlがあったかどうかですね
excel_url_add()
if excel_url_search(url, word):
後述する「excel_url_search()
」の結果から判定しています
ここでTrueが返却されていればExcelに登録されていないと判断して新規追加しています
rank_row = excel_keyword_position(word)
検索順位をどこのセル行に追加するのかを返却してくれます
ws[ws.cell(row=rank_row, column=ini_column).coordinate] = rank
見ての通り、検索順位をセルに追加していますini_column
はセルに何かを追加する前の最大列+1です
excel_date_add()
ws[ws.cell(row=1, column=ini_column).coordinate] = datetime.date.today()
今日の日付をセルに追加しています
excel_url_search()
url_list = [cell.value for cell in ws['A']]
keyword_list = [cell.value for cell in ws['B']]
A列にあるurlリストをすべて取得しています(keywordも同じです)
if url_list.count(url) != 0 and keyword_list.count(keyword) != 0:
url_listに同じurlがありkeyword_listにも同じkeywordがあるならFalseを返却します
excel_keyword_position()
keyword_list = [cell.value for cell in ws['B']]
keyword_row = keyword_list.index(keyword) + 1
B列のキーワードをリストで取り出し、「.index()」でそのキーワードに行番号を取得する
(同じキーワードが存在するとうまく動かない)
最後に
前半コード公開・後半ザックリとコードの解説を行いました
検索順位の取得とかはわりと簡単にできたんですが、Excelのセル指定とかが鬼門で結構時間取られました…
おそらく今後別の記事で、Kivyとか追加した後のことを投稿すると思いますので、その時にはご覧いただけると幸いです
ここまで読んで下さり、ありがとうございました
ではでは~
ディスカッション
コメント一覧
まだ、コメントがありません