【Webスクレイピング】Python自作ツールでブログの競合サイトを調査する方法

競合サイト調査 自作ツールアイキャッチ
スポンサーリンク

こんにちは、あぶちゃです。

このブログでは、AI業界への転職を考えている方に役立つ情報をお届けしています。転職に役立つヒントから最新のAIツールや技術の紹介をしています。本ブログによって、少しでもAIの魅力を感じていただけると嬉しいです!

悩んでいる人

ブログのキーワード選定って重要なのはわかっているけど時間がかかる!効率よくやる方法はないの?

以上のような疑問にお答えしていきます。

このブログ記事は、ブログのキーワード選定を自動化して効率化したい!と考えている読者を対象としています。

この記事で学べること
  • Webスクレイピングの方法
  • 競合サイト調査 自作ツールの作り方

検索サイトからのアクセスを増やすためには、適切なキーワード選定が重要です。

しかし、キーワード選定は時間がかかる作業であり面倒くさくて結局、いい加減に選んでしまっていませんか?

そんな時は、Webスクレイピング技術を用いて、競合サイトを調査するPythonの自作ツールが大活躍します!

本記事では、Seleniumを用いたブログキーワード選定をする際の競合サイト調査を自動化できる自作ツールを紹介します。

時間がかかる競合サイト調査を自動化して、キーワード選定の効率化を行いましょう!

ノンプログラマーの人でも使用できるように、競合サイト調査を自動化できる自作ツールをわかりやすく解説していますので、ぜひ参考にしてみてください

以下の記事では、AI職種を6つ紹介しています。未経験からでも転職は可能なので、AIに興味がある方は参考にしてみてください。

AIエンジニアを目指すには?

AI技術はビジネスや社会の様々な分野で急速に活用されるようになっており、pythonを使ってAI技術を実装できる「AIエンジニア」は益々、貴重な存在になっており、高収入も期待できます!

あぶちゃ

働きながら「AIエンジニア」を目指すなら、初心者でも無理なく学習ができ、就職サポートがあるオンラインスクールがおすすめです。

【参考】AI×Pythonに特化したオンラインスクール

AI×Pythonに特化したオンラインスクール
TechAcademy [テックアカデミー]
  • 選抜された現役エンジニアから学べるオンラインに特化したプログラミングスクール
  • 初心者が9割以上。週2回のメンタリングにより個別に目標を設定するため、挫折せずに学べる。
  • 一人ひとりのスキルに合わせた転職の機会の提供とサポート

AIコースは、第四次産業革命スキル習得講座に認定されているため、条件を満たすことで受講のために支払う受講料の最大70%が教育訓練給付金としてハローワークから支給されます。

あぶちゃ

無料体験や無料でキャリア相談もできるため、迷っている方はまずは、体験や相談してみることで、AIエンジニアとしてのキャリアを具体的にイメージできるようになります!

目次

競合サイト調査 自作ツールで実現したいこと

ブログキーワード選定の必要性

ブログの記事を書く際に、どのキーワードで記事を書くかを選定することは検索サイトからのアクセスを増やすためのSEO対策としてとても重要です。

誰も検索しないキーワードを選定してしまったら、いかに素晴らしい記事を書いても誰も読んでくれません。

また、競合が多いキーワードを選んでしまったら検索エンジン上での上位表示をされることが難しく、それもまた記事が埋もれてしまって誰も読んでくれないといったことが起こってしまいます。

キーワード選定はユーザーのニーズに合ったコンテンツを提供し検索エンジン上での上位表示をする上でとても重要ですが、一般的に以下のような作業を行う必要があり、時間がかかります。

キーワード選定方法

STEP
テーマの決定

まずは、読者が興味を持ちそうな記事のテーマを決めます。

例えば、副業のテーマに関しての記事を書きたい場合は、テーマは「副業」になります。

STEP
キーワードの洗い出し

テーマを決定したら、そのテーマに関連するキーワードを洗い出します。

無料のツールであるラッコキーワードを使うと簡単にキーワードを洗い出すことができます。

STEP
キーワードの絞り込み

洗い出したキーワードの中からより適切なキーワードに絞り込みます。

キーワードプランナーなどでキーワードの検索ボリュームを調べ、狙いとする検索ボリュームのキーワードから絞り込んでください。

ロングテールキーワード(月間の検索ボリュームが、1,000未満のもの)を狙うと良いと言われています。

STEP
競合サイトの調査

絞り込んだキーワードの競合サイトを調査します。

絞り込んだキーワードで検索をしてみて、上位表示されているサイトがどのようなサイトなのかを調べます。

もし、上位表示されているサイトが企業サイトなどの強いサイトではなく、無料ブログやQ&Aサイトの場合であれば、自身の記事が上位表示される可能性が高まります。

STEP
キーワードの選定

競合サイトの調査結果により、最終的なキーワードを選定します。

ラッコキーワードやキーワードプランナーの使い方に関しては、yuji blog.さんのブログキーワード選定のやり方6ステップ【穴場キーワードを探すコツ】が参考になります。

今回のプロジェクトの目的

上記のキーワード選定方法の中で、一般的に使用されている無料ツールなどがなく、時間がかかる部分は「Step 4 競合サイトの調査」になります。

あぶちゃ

「Step 4 競合サイトの調査」を自動化できれば、キーワード選定の時間を短縮することができ、より質の高い記事を作成するために時間をもっと使えるようになります。

よって、目的を以下としました。

目的

絞りこんだキーワードの競合サイトを自動で検索できる「競合サイト調査の自作ツール」を作成する。

今回のプロジェクトの目標と必要な機能

Webスクレイピングという技術を使うことで、絞り込んだキーワードで検索した際に上位表示されている競合サイトの情報を自動的に取得することが目標になります。

また、目標を達成するために必要な機能を以下のように、設定しました。

必要な機能

  1. 指定したキーワードで自動的に検索を行い、競合サイト調査に必要な情報である「サイト名」、「記事タイトル」、「サイトのURL」を取得する
  2. 取得した情報をエクセルに出力する
スポンサーリンク

コア技術 | Webスクレイピング

Webスクレイピングとは

わかりやすく言うと、Webサイトに記載されているたくさんの情報から必要な情報(テキスト、画像や動画など)のみを自動的に抽出して取得するための技術になります。

Webスクレイピングを使用することによって、手動でデータを収集する場合に比べて非常に高速かつ大量にデータを収集することができます。

今回、使用するpython ライブラリ

「Google Colaboratory (Colab)」を使うと自身のパソコンに開発環境を構築しなくても、ブラウザ上でPythonコードを書いたり、実行したりすることができます。

あぶちゃ

自身のPythonの開発環境がない方は、Colabを使うことで簡単にPythonを使ってみることができます!

Selenium

概要

Seleniumは、Pythonを含む複数のプログラミング言語で使用できるWebアプリケーション自動化ツールです。

主な用途は、Webブラウザを自動化してWebアプリケーションの機能をテストすることですが、Webスクレイピングにも使用することができます。

Pythonで使用する場合は、WebDriverと呼ばれるPythonモジュールをインストールすることで使用することができます。

競合サイト調査の自作ツールでのSeleniumの用途

上記で定義した必要な機能の1つ目の機能である

  1. 指定したキーワードで自動的に検索を行い、競合サイト調査に必要な情報である「サイト名」、「記事タイトル」、「サイトのURL」を取得する

を実現するためにSeleniumを使用します。

xlwing

概要

xlwingsは、PythonでExcelファイルを操作するためのライブラリです。

Pythonを用いて、Excelのワークシート、グラフ、およびVBAマクロを制御でき、ExcelのGUIを操作せずに、Pythonのコードを使用してExcelファイルを読み込んだり、作成したり、更新したりすることができます。

競合サイト調査の自作ツールでのxlwingの用途

上記で定義した必要な機能の2つ目の機能である

  1. 取得した情報をエクセルに出力する

を実現するためにxlwingを使用します。

スポンサーリンク
スポンサーリンク

事前準備

pythonライブラリのインストール

以下のコマンドをターミナルで実行して、必要なpythonライブラリをインストールしてください。

Seleniumのインストール

pip install selenium

xlwingのインストール

pip install xlwings

Seleniumを使用するための事前準備

Seleniumを使用するためには以下の事前準備を行う必要があります。

Seleniumを使用するための事前準備
google chromeドライバーの入手

Google Chromeドライバーは、SeleniumでChromeを制御するために必要になります。

現在、使用しているGoogle Chromeブラウザのバージョンを確認し、Chromeドライバーのサイトから自身のChromeバージョンに対応するChromeドライバーをダウンロードしてください。

googleアカウントのプロフィールパス取得

Seleniumを使ってgoogleにアクセスする際、googleアカウントを指定してあげないと以下の問題が発生します。

“Cookieの設定画面が表示されて、適切にchromeを制御できない

Cookieの設定が完了しているgoogleアカウントのプロフィールパスを事前に取得して、コード内で指定する必要があります。

以下の記事で、Seleniumを使用するための事前準備の詳細の方法を解説しています。Seleniumを使ったWebスクレイピングの方法も解説していますので、参考にしてください。

競合サイト調査 ツール pythonコード

フォルダ構成

競合サイト調査 ツールのフォルダ構成を以下で構成しています。

メインコードと関数コードの関係を変える場合は、メインコードの最初の行に記載されている関数コードを読み込む記述を適切に変更してください。

競合サイト調査 ツールのフォルダ構成画像
競合サイト調査 ツールのフォルダ構成

コードの構成

本記事のコードの構成方法は

  1. メインコード内でユーザー変数を定義
  2. メインコードから「google検索結果を取得する関数」を実行
  3. 「google検索結果を取得する関数」からメインコードに結果を返す
  4. メインコードから結果を「エクセルに出力する関数」を実行
  5. 「結果をエクセルに出力する関数」が結果をエクセルに出力

となり、以下の画像のようにデータをやり取りして、絞りこんだキーワードの競合サイトを自動で検索しています。

ユーザー変数

変更が必要な変数は以下の5つの変数になります。

keyword

調べたいキーワードを入力してください。

例:副業、おすすめの2語のキーワードで検索したい場合は、keyword = “副業 おすすめ”と入力してください。

require_page_num

googleの検索結果の何ページ目までの競合サイトを調べたいか入力してください。

chrome_driver_path

chromeドライバーの保存先フォルダのパスを入力してください。

profile_path

取得したgoogleアカウントのプロフィールのパスを入力してください

excelfile_name

結果を保存する希望のエクセルファイル名を入力してください。

あぶちゃ

ユーザーが変更する必要がある変数は、簡単にアクセスできるようにすべてメインコード内にまとめました。

メインコード

from Function import BlogKeywordFunc

# ユーザー定義
# 調べたいキーワードを入力
keyword = "調べたいキーワードをこちらにいれてください"

# 何ページ目まで調べたいかを入力
require_page_num = 1

# chrome driverのパスを入力
chrome_driver_path = "chrome driverを保存したフォルダのパスをいれてください"

# google アカウントのプロフィールパス定義
profile_path = "使用したいgoogle アカウントのプロフィールのパスを入力してください"

# Excelファイル名定義 必要に応じて適宜変更ください。
excelfile_name = "competitor_site_info.xlsx"

# プログラム実行
# google検索で、サイト名、タイトル、サイトのURLを取得する。
result_list = BlogKeywordFunc.google_search_result(
    keyword, require_page_num, chrome_driver_path, profile_path)

# どのセルに結果を出力するか定義
startcell = "A1"

# シート名を定義
sht_name = keyword
BlogKeywordFunc.save2excel(result_list, startcell, sht_name, excelfile_name)

関数コード

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import xlwings as xw
import pandas as pd


# seliniumによるwebスクレイピング「サイト名」、「記事タイトル」、「サイトのURL」を取得する
def google_search_result(keyword, require_page_num, chrome_driver_path, profile_path):
    # 待機時間の設定[s]
    wait_time = 3

    # google chrome プロフィールパス定義
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--user-data-dir="+profile_path)

    # chrome driverを使って、googleサイトにアクセス
    driver = webdriver.Chrome(
        executable_path=chrome_driver_path, options=chrome_options)
    driver.get("https://www.google.co.jp/")

    # INTERVAL秒間待つ
    time.sleep(wait_time)

    # 検索欄にキーワードを入力
    elem = driver.find_element(By.NAME, "q")
    elem.send_keys(keyword)

    # INTERVAL秒間待つ
    time.sleep(wait_time)

    # 検索実行ボタンをクリックする
    driver.find_elements_by_name('btnK')[0].click()

    # 変数の初期化
    page = 1  # ページ数の初期値
    site_name_list = []  #  サイト名のリスト初期化
    title_list = []  #  タイトルのリスト初期化
    site_url_list = []  #  URLのリスト初期化

    while page <= require_page_num:

        # INTERVAL秒間待つ
        time.sleep(wait_time)

        # サイト名、タイトル、サイトのURLが入った箇所を取得
        serch_result_list = driver.find_elements_by_css_selector('.yuRUbf')

        # サイト名、タイトル、サイトのURLを取得する。
        for serch_result in serch_result_list:
            # 取得したサイト名が空でない場合に、それぞれのリストに情報を追加
            try:
                if serch_result.find_element_by_class_name('VuuXrf').text:
                    site_name_list.append(
                        serch_result.find_element_by_class_name('VuuXrf').text)
                    title_list.append(
                        serch_result.find_element_by_tag_name('h3').text)
                    site_url_list.append(serch_result.find_element_by_tag_name(
                        'a').get_attribute('href'))
            except:
                pass

        # ページの遷移
        if page < require_page_num:
            next_page_url = driver.find_element_by_id(
                'pnnext').get_attribute('href')
            driver.get(next_page_url)

        page += 1

    # chrome driveを修了する
    driver.close()

    # サイト名、タイトル、サイトのURLを一つのデータフレームにする
    # 順位を示すリストを作成する。
    order_list = []
    for i in range(len(site_name_list)):
        order_list.append("順位"+str(i+1))

    # pandasデータフレームを作成
    result_list = [site_name_list, title_list, site_url_list]
    result = pd.DataFrame(result_list, index=[
                          "サイト名", "タイトル", "サイトのURL"], columns=order_list).T

    return result

# 取得した情報をエクセルに出力する


def save2excel(data_in, startcell, sht_name, excelfile_name):
    wb = xw.Book()
    wb.sheets.add(sht_name)
    xw.Range(startcell).value = data_in
    wb.save(excelfile_name)
    wb.close()
スポンサーリンク

実行結果

メインコードを保存しているフォルダに、エクセルファイルが作成されます。

あぶちゃ

「サイト名」、「記事タイトル」、「サイトのURL」が出力されており、目標を達成できました!

競合サイト調査の自作ツール結果画像
競合サイト調査の自作ツール結果

“最後に” 競合サイト調査 自作ツール | まとめ

本記事では、Seleniumを用いたブログキーワード選定をする際の競合サイト調査を自動化できる自作ツールをノンプログラマーの方でも使用できるようにわかりやすく解説しました

時間がかかる競合サイト調査を自動化することでキーワード選定の効率化を行うことができます。

より適切なキーワードを選定を行うことで、検索サイトからのアクセスを増やしていきましょう!

本記事のまとめは、以下になります。

まとめ
  • 絞りこんだキーワードの競合サイトを自動で検索できる「競合サイト調査の自作ツール」を作成した
  • 実装した機能としては以下の2つ
    • 指定したキーワードで自動的に検索を行い、競合サイト調査に必要な情報である「サイト名」、「記事タイトル」、「サイトのURL」を取得する
    • 取得した情報をエクセルに出力する
  • 今回、使用したpython ライブラリ
    • Selenium
    • xlwing
  • ノンプログラマーの方でも使用できるように、ツールの全pythonコードを公開し、ツールを活用するために必要な事前準備やツールの構成に関しての徹底解説した

Pythonを使ったツールとして、一括で画像圧縮を実現する方法も解説しています。興味がある方は、ぜひご覧ください!

AIエンジニアを目指すには?

「今の仕事にやりがいを感じられない」「もっと高収入の仕事に就きたい」と思っているけど、一歩踏み出せずに日々を過ごしてしまっていませんか?

自分が情熱を持てる仕事で社会や人に貢献することで、自身の人生の充実度や幸福度をアップしたいと悩んでいる人も多いはず。

そんな人には、最先端のAI技術を使って、より良い世の中を実現していく「AIエンジニア」を目指すことをおすすめします。

AI技術はビジネスや社会の様々な分野で急速に活用されるようになっており、pythonを使ってAI技術を実装できる「AIエンジニア」は益々、貴重な存在になっており、高収入も期待できます!

あぶちゃ

働きながら「AIエンジニア」を目指すなら、初心者でも無理なく学習ができ、就職サポートがあるオンラインスクールがおすすめです。

AI×Pythonに特化したオンラインスクール

AI×Pythonに特化したオンラインスクール
TechAcademy [テックアカデミー]
  • 選抜された現役エンジニアから学べるオンラインに特化したプログラミングスクール
  • 初心者が9割以上。週2回のメンタリングにより個別に目標を設定するため、挫折せずに学べる。
  • 一人ひとりのスキルに合わせた転職の機会の提供とサポート

AIコースは、第四次産業革命スキル習得講座に認定されているため、条件を満たすことで受講のために支払う受講料の最大70%が教育訓練給付金としてハローワークから支給されます。

あぶちゃ

無料体験や無料でキャリア相談もできるため、迷っている方はまずは、体験や相談してみることで、AIエンジニアとしてのキャリアを具体的にイメージできるようになります!

最後まで、お付き合いいただきまして、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

機械系エンジニアから未経験でAI業界に転職。
未経験からの挑戦でしたが、オンラインコースや認定資格を活用し転職を果たしました。現在はAIプロジェクトの担当として、AI技術を活用した新規プロジェクトの企画・運営を担当しています。
自分の経験を基に、AI業界に興味がある方に向けて情報を発信しています。私の経験が少しでも皆さんの転職活動の助けになれば幸いです。

目次