ブログの記事を書いている人の中には、競合サイトのブログ記事を調査(リサーチ)する人は多いです。
このリサーチ作業の目的は、競合ブログがどのようなキーワードを目次に入れているかを確認することにあります。
しかしどれだけ重要であることを理解していたとしても、作業そのものは非常に面倒くさいです。
・調査のとき、エクセルにコピペするのがメンドウ
・競合調査が多いと、どこまでコピペしたのか分からなくなる
・でも、競合調査をしないと誰にも見られない記事になってしまう
そこで、競合ブログの記事の目次や記事タイトルを自動でエクセルに一覧にするツールを作成しました。
このツールを使うことで、以下のメリットがあります。
・10秒で狙っているキーワードで上位表示されている記事の目次を確認できる
・記事検索、目次コピペなどのムダな作業がなくなる
・記事内の上から順番にH1タグ、H2タグ、H3タグ(見出し)情報を取得してエクセルに一覧にしてくれる
それでは以下で詳しく説明していきます。
目次
プログラムの使い方
ステップ1|実行ボタンを押す
ステップ2|キーワードを入力する
ステップ3|所定フォルダにエクセルが作成される
ステップ4|エクセルの中身を見る
ステップ1|実行ボタンを押す
ステップ2|キーワードを入力する
検索したいキーワードを入力します。
ここでは「パソコンスキル」というキーワードを入力します。
ステップ3|所定フォルダにエクセルが作成される
ステップ4|エクセルの中身を見る
・H1, H2, H3の内容をエクセルに出力する。
以下でプログラムの内容を記載します。
Googleでキーワード検索のトップ10記事のH1, H2, H3タグをエクセルに一覧に出力するプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
from datetime import datetime import os from selenium import webdriver from selenium.webdriver.chrome.options import Options import openpyxl from openpyxl.styles import Font import time import requests from bs4 import BeautifulSoup def enable_download_in_headless_chrome(browser, download_dir): browser.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command') params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}} browser.execute("send_command", params) def main(): print('検索キーワードを入力してください') search_query=input() options = Options() options.add_argument('--headless') path = os.getcwd() exefile = path + "\\chromedriver.exe" driver = webdriver.Chrome(options=options, executable_path=exefile) enable_download_in_headless_chrome(driver, path) driver.get('https://www.google.co.jp/search?q='+search_query) title=[] url=[] wb=openpyxl.Workbook() ws=wb.active font = Font(color='0000CC', underline='single') ws.cell(row=1, column=1).value = "キーワード" ws.cell(row=1, column=2).value = search_query title_header=["順位", "タイトル" , "H1" , "H2" , "H3"] for a in range(len(title_header)): b=int(a) ws.cell(row=3, column=b+1).value = title_header[b] lastrow = 4 for i, g in enumerate(driver.find_elements_by_class_name("g")): r = g.find_element_by_class_name("r") title.append(r.find_element_by_tag_name("h3").text) # タイトル url.append(r.find_element_by_tag_name("a").get_attribute("href")) # URL for k in range(len(url)): #len(url) q=int(k) ws.cell(row=lastrow, column=1).value = q+1 ws.cell(row=lastrow, column=2).value = title[q] ws.cell(row=lastrow, column=2).hyperlink = url[q] ws.cell(row=lastrow, column=2).font = font lastrow=lastrow+1 reqs = requests.get(url[q]) soup = BeautifulSoup(reqs.text, 'lxml') for heading in soup.find_all(["h1", "h2", "h3"]): if heading.name == "h1": ws.cell(row=lastrow, column=3).value = heading.text.strip() lastrow=lastrow+1 elif heading.name == "h2": ws.cell(row=lastrow, column=4).value = heading.text.strip() lastrow=lastrow+1 else: ws.cell(row=lastrow, column=5).value = heading.text.strip() lastrow=lastrow+1 Excelfile = "GoogleSearch_" + search_query + "_" + datetime.now().strftime("%Y%m%d_%H%M%S") + ".xlsx" saveFilePath=path +"\\" + Excelfile wb.save(saveFilePath) if __name__ == "__main__": main() |
プログラム実行における注意点
3つの注意点があります。
注意点1|ライブラリをインストールする
この記事で紹介するプログラムをそのまま実行する場合、以下の4つのライブラリをインストールしておく必要があります。
1 |
pip install openpyxl |
1 |
pip install requests |
1 |
pip install BeautifulSoup |
注意点2|情報を取得できない場合がある
このツールでは記事の目次がエクセルに出力されるように設計されています。
しかし記事の性質によっては、情報を取得できない場合があります。
実際、「社会人 勉強」のキーワードで情報を取得したとき、4位と10位の結果を取得できませんでした。
必ずしもすべての情報を取得できるわけではないことを理解してください。
注意点3|節度をもって自己責任で使う
こちらの記事でも記載されていますが、悪意のあるスクレイピングは罰則を受けることにつながるリスクがあります。
私は法律の専門家ではないため、詳しくは上記の記事に譲りますが、節度をもってスクレイピングを使用することをお願いいたします。
節度を持った使用とは、具体的には以下の3つです。「著作権法上の問題」、「利用規約との抵触」、「サーバーへの過度なアクセス」です。
この記事でスクリプトを公開している理由は、よりよい情報をユーザーに提供するために必要な情報収集の効率化です。
したがって、スクレイピングをする目的を考え、悪意のある使い方はしないことを推奨します。
以上のことをご理解いただいたうえで、本プログラムを使用ください。何かあった場合は私は責任を負いません。