こんにちは。KOUKIです。
皆さんは、ブログを書く時、キーワード選定及びライバルサイトの分析を行っているでしょうか?
私の場合ですが、キーワードを選定したら上位のサイトの記事を一通り読みます。
「ライバルがどんな記事を書いているのか?」について、調べるわけですね。
この作業を一部効率化するために、Google検索の1ページ目に表示されるサイトの「url」,「title」,「description」をcsvに保存するツールを作りました。
本記事は、キーワード選定効率化ツールの紹介になります。
<こんな方向け>
・ 検索結果1ページ目のサイト情報を収集したい人
・ ブログ作業の自動化方法を検討している人
<目次>
こんな情報を集める
下記のキャプチャは、キーワード選定効率化ツールの収集結果(csv)をGoogleスプレッドシートに表示させたものです

上記は、「seo」と「blog」の2語でGoogle検索を行い、1ページ目に表示された記事のurl,title,descriptionを取得しています。
文字化けしていたり、空欄の箇所がありますが、参照先のサイトの設定によるものですのでご了承ください。
また、初回実行時には、データがうまく取得できないこともありますので、何度か実行してみてください。
キーワード選定効率化ツールの仕組み
キーワード選定効率化ツールは、PythonとSeleniumを使って、実装しています。
プログラムを実行するとChromeが立ち上がり、任意のキーワードを元にGoogle検索を行い、検索結果の1ページ目を表示します。その後、Chromeが閉じ、ローカルにcsvファイルが出力されます。
出力場所は、サンプルプログラムと同じディレクトリ上に格納され、ファイル名は、検索ワードをアンダーバー(_)で繋いだものになります。
環境構築
環境構築が少しだけ大変ですが、一つ一つの作業は、3分以内に終わります。
1. Pythonをインストールする
2. 仮想環境を構築する
3. Pythonの追加モジュールをインストールする
4. Chromeをインストールする
5. Selenium Driverをインストールする
Python
Pythonをローカルにインストールします。
インストール方法※超簡単です
仮想環境の構築
Pythonのインストールが完了したら下記のコマンドで、仮想環境を構築できるようになっているはずです。
1 2 3 4 5 6 7 8 9 10 11 12 |
# desktopに移動 cd Desktop # 作業ディレクトリ作成 mkdir sample cd sample # 仮想環境構築 virtualenv venv # virtualenvが使えない場合は、インストールしてください pip install virtualenv |
virtualenvコマンドが正常に終了すると「venv」フォルダが作成されます。
仮想環境を作成すると、自分のPCの環境とは別の環境を作成することができます。仮想環境上で行った作業は自分のPCには影響が及ばなくなるのです。
仮想環境は、次のコマンドで有効になります。
1 2 3 |
# macの場合 $ source venv/bin/activate (venv) $ |
プロンプトの先頭に(venv)が出てきたでしょうか?
Windowsの場合は、次のコマンドで仮想環境を有効にします。
1 2 3 |
# Windowsの場合 $ venv\Scripts\activate (venv) $ |
追加モジュール
仮想環境を有効にした状態で、次のコマンドを実行してください。
1 2 3 |
pip install requests pip install beautifulsoup4 pip install selenium |
Chrome
ここからChromeをインストールしてください。
Selenium Driver
プログラムとChromeの橋渡しを担うのが、Selenium Driverです。
ここからインストールしてください。
Selenium Driverのバージョンは、お使いのChromeのバージョンと合わせてください。
Chromeのバージョンは、「Google Chromeについて」から確認できます。


Selenium Driverのバージョンは、次の通りになります。


手に入れたSelenium Driver(chromedriver)を仮想環境の次のフォルダ配下に格納してください。
1 2 3 4 5 6 7 |
# activateファイルが格納されているフォルダに格納する # mac venv/bin/chromedriver # Windows venv/Scripts/chromedriver.exe |
実行方法
コマンドライン上で、実行します。
1 2 3 4 5 6 7 |
# ファイル名(selfnote_seo.py)は、任意 (venv)$ python selfnote_seo.py keyword1 keyword2 ...N 例) ファイル名の後にキーワードを指定 (venv)$ python selfnote_seo.py blog # blog.csvで出力 (venv)$ python selfnote_seo.py blog seo # blog_seo.csvで出力 (venv)$ python selfnote_seo.py blog seo 効率化 # blog_seo_効率化.csvで出力 |
諸注意
本ツールは、任意の文字列からGoogle検索を行い、1ページ目に表示されたサイトのurl, title, descriptionをcsv形式で保存します。
しかし、アクセスできないサイトもあるため、実数が異なる場合があります。
また、csvファイルに出力される結果は、1ページ目の上位のサイトから順に出力されているわけではありません。出力順は、ランダムになります。
改善したいところですが、1ページ目に表示されるサイトは、全て目を通したほうがいいと思いますので、とりあえずこのままにしました。
このツールの使い所
このツールは、次の用途で使うのがベストです。
1. キーワード検索後、1ページ目に表示されるサイトを自動収集したい
2. 一か月後、半年後など特定期間で1ページ目に表示されるサイトの推移を知りたい
3. ライバルがどのようなtitle, descriptionを付けているか知りたい
サンプルコード
下記のコードをselfnote_seo.pyのファイル名で任意の場所に保存してください。
No. | バージョン | 備考 |
---|---|---|
1 | Ver1 | 新規作成 |
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 |
# ====================================================================== # File Name : selfnote_seo.py # Creation Date : 2019/10/4 # Update Date : # # Copyright <2019> selfnote. All rights reserved. # ====================================================================== import csv import requests import sys from bs4 import BeautifulSoup from selenium import webdriver def save_meta_info(url_list): meta_info_list = [] for url in url_list: try: r = requests.get(url) html = BeautifulSoup(r.text, 'html.parser') metas = html.find_all('meta') meta_info_list.append({ 'url': url, 'title': html.title.text, 'description': [meta.attrs['content'] for meta in metas if 'name' in meta.attrs and meta.attrs['name'] == 'description' ]}) except Exception as e: meta_info_list.append({'url': url, 'title': 'Can not read title', 'description': 'Can not read description'}) csv_filename = ' _'.join(sys.argv[1:]) + '.csv' with open(csv_filename, 'a', newline='') as csv_file: fileheader = ['url', 'title', 'description'] writer = csv.DictWriter(csv_file, fieldnames=fileheader) writer.writeheader() for meta_info in meta_info_list: try: writer.writerow(meta_info) except Exception: writer.writerow( {'url': meta_info['url'], 'title': 'Can not read title', 'description': 'Can not read description'}) return def pull_article(): driver = webdriver.Chrome() driver.get('https://www.google.com/') search_box = driver.find_element_by_name("q") search_box.send_keys(' '.join(sys.argv[1:])) search_box.submit() url_list = [] elements = driver.find_elements_by_class_name('r') for element in elements: url_list.append(element.find_element_by_tag_name('a').get_attribute("href")) driver.quit() return url_list if __name__ == '__main__': url_list = pull_article() save_meta_info(url_list) |
合わせて知っておきたい便利ツール
あとがき
いかがでしたでしょうか?
個人ブロガーの場合は、記事の追加・更新作業などを一人で行わなければならず、かなり大変です。
こういった「単純作業」は、プログラムで自動化してしまえば、作業時間がグっと減ります。
「こういう機能が欲しい」という要望があれば、コメントに下さい。
それでは、また!
コメントを残す
コメントを投稿するにはログインしてください。