【Python】Google検索結果をExcelに出力する

機能

Google検索結果をExcelに出力するPythonプログラムです。

任意のキーワードでGoogle検索を行い、検索結果をExcelに出力します。

サンプル動画

youtu.be

プログラム

#! python3
# 機能
#  Google検索結果をExcelに出力する
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python google_search_excel.py 検索ワード
#  python google_search_excel.py Python
#  python google_search_excel.py Python 入門

import sys
import time
import openpyxl
import datetime
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import logging

# webdriver_managerのログを抑止する
logging.disable(logging.INFO)

# 検索する
def search(driver, keywords, search_count):
    results = []

    # 検索数まで検索結果を取得する
    while len(results) <= search_count:
        if len(results) == 0:
            # キーワードで検索する
            driver.get("http://google.com/search?q=" + " ".join(keywords))
        else:
            # 次ページがあれば遷移する
            elements = driver.find_elements_by_css_selector("#pnnext")
            if len(elements) == 0:
                break
            elements[0].click()
        time.sleep(3)

        # 検索結果のリンクを取得する
        elements = driver.find_elements_by_css_selector(".g .yuRUbf > a")
        if len(elements) == 0:
            break

        # URLとタイトルを取得する
        for element in elements:
            url = element.get_attribute("href")
            title = element.find_elements_by_css_selector("h3")[0].text
            results.append({"url": url, "title": title})

    return results[:search_count]


# 検索結果をExcelに出力する
def search_excel(keywords, search_count):
    # 検索する
    driver = webdriver.Chrome(ChromeDriverManager().install())
    results = search(driver, keywords, search_count)
    driver.quit()

    if len(results) == 0:
        print("検索結果が見つかりませんでした。")
        return

    # Excelに出力する
    wb = openpyxl.Workbook()
    sheet = wb.active
    sheet.cell(row=1, column=1).value = "キーワード"
    sheet.cell(row=1, column=2).value = " ".join(keywords)
    sheet.cell(row=2, column=1).value = "検索順位"
    sheet.cell(row=2, column=2).value = "タイトル"
    sheet.cell(row=2, column=3).value = "URL"
    for i in range(len(results)):
        sheet.cell(row=3 + i, column=1).value = 1 + i
        sheet.cell(row=3 + i, column=2).value = results[i]["title"]
        sheet.cell(row=3 + i, column=3).value = '=HYPERLINK("{}")'.format(
            results[i]["url"]
        )
    sheet.column_dimensions["A"].width = 10
    sheet.column_dimensions["B"].width = 60

    sysdate = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    wb.save("検索結果_{}.xlsx".format(sysdate))
    print("検索結果をExcelに出力しました。")


if len(sys.argv) < 2:
    sys.exit("使い方:python google_search_excel.py 検索ワード")

# 検索する(最大20件)
search_excel(sys.argv[1:], 20)

出力件数を変更したい場合は以下を修正して下さい。

search_excel(sys.argv[1:], 出力件数)

使い方

  1. Pythonを実行する

コマンド

インストールコマンド

seleniumとwebdriver-managerをインストールしていない場合は以下のコマンドを実行して下さい。

pip install selenium
pip install webdriver-manager

Seleniumを利用するにあたって、いくつか注意点がありますので、以下を参考にして下さい。

stmtk358.hatenablog.com

実行コマンド

python google_search_excel.py 検索ワード
python google_search_excel.py Python
python google_search_excel.py Python 入門

実行環境

プログラム実行時の環境は以下になります。

開発環境については以下を参考にして下さい。

stmtk358.hatenablog.com

プログラムのバッチ化については以下を参考にして下さい。

stmtk358.hatenablog.com

exeファイル

Python環境がなくても実行可能なexeファイルもあります。

とりあえず試してみたい方は以下からダウンロードして下さい。

github.com

実行方法

コマンドラインから以下のコマンドを実行して下さい。

google_search_excel.exe 検索ワード
google_search_excel.exe Python
google_search_excel.exe Python 入門

GitHub

今回使用したプログラムやテストデータはGitHubにアップロードしています。

github.com

参考文献

www.oreilly.co.jp