【Python】でGoogle検索からのcsv出力!【簡単】
背景
何かを調べるときに、Googleによる要約で、だいたい調べたいことがわかるから、要約とタイトル、URLをGoogle検索から引っ張りたかった。
目的
Google検索して、検索結果を取得し、CSVにして出力するのを自動化する。 自動化することで、今まで、検索に費やされていた時間を減らす。
要件定義
- ブラウザの自動操作
- 検索結果から、タイトルと要約、URLを得る
- 得た結果をCSVに出力する
環境
Windows10Pro
Python3.7
Anaconda
環境構築方法
今回作成しているプログラムは、Chromeの81バージョンを前提としています。
そのため、プログラムを実行する前にChromeのバージョンを81にしておいてください。
↓こちらがわかりやすいです。
Google Chromeのバージョンの確認方法
pip install selenium pip install chromedriver_binary
実際に書いたコード
import csv import time # スリープを使うために必要 from selenium import webdriver # Webブラウザを自動操作する(python -m pip install selenium) import chromedriver_binary # パスを通すためのコード def ranking(driver): i = 1 # ループ番号、ページ番号を定義 title_list = [] # タイトルを格納する空リストを用意 link_list = [] # URLを格納する空リストを用意 summary_list = [] RelatedKeywords = [] # 現在のページが指定した最大分析ページを超えるまでループする while i <= i_max: # タイトルとリンクはclass="r"に入っている class_group = driver.find_elements_by_class_name('r') class_group1 = driver.find_elements_by_class_name('s') class_group2 = driver.find_elements_by_class_name('nVcaUb') # タイトルとリンクを抽出しリストに追加するforループ for elem in class_group: title_list.append(elem.find_element_by_class_name('LC20lb').text) # タイトル(class="LC20lb") link_list.append(elem.find_element_by_tag_name('a').get_attribute('href')) # リンク(aタグのhref属性) for elem in class_group1: summary_list.append(elem.find_element_by_class_name('st').text) # リンク(aタグのhref属性) for elem in class_group2: RelatedKeywords.append(elem.text) # リンク(aタグのhref属性) # 「次へ」は1つしかないが、あえてelementsで複数検索。空のリストであれば最終ページの意味になる。 if driver.find_elements_by_id('pnnext') == []: i = i_max + 1 else: # 次ページのURLはid="pnnext"のhref属性 next_page = driver.find_element_by_id('pnnext').get_attribute('href') driver.get(next_page) # 次ページへ遷移する i = i + 1 # iを更新 time.sleep(3) # 3秒間待機 return title_list, link_list, summary_list, RelatedKeywords # タイトルとリンクのリストを戻り値に指定 driver = webdriver.Chrome() # Chromeを準備 # サンプルのHTMLを開く driver.get('https://www.google.com/') # Googleを開く i_max = 5 # 最大何ページまで分析するかを定義 search = driver.find_element_by_name('q') # HTML内で検索ボックス(name='q')を指定する search.send_keys('スクレイピング 自動化 "Python"') # 検索ワードを送信する search.submit() # 検索を実行 time.sleep(1.5) # 1.5秒間待機 # ranking関数を実行してタイトルとURLリストを取得する title, link, summary, RelatedKeywords = ranking(driver) csv_list = [["順位", "タイトル", "要約", "リンク", "関連キーワード"]] for i in range(len(title)): add_list=[i+1,title[i],summary[i],link[i]] csv_list.append(add_list) # タイトルリストをcsvに保存 with open('Search_word.csv','w',encoding="utf-8_sig") as f: writecsv = csv.writer(f, lineterminator='\n') writecsv.writerows(csv_list) driver.quit()
感想
合計で、4時間程度で、作成することが出来た。 seleniumを使ったブラウザの自動操作をすることができるようになり、タイトルの取得も出来るようになったので、満足。 ブログを書くときに使えるぞ!
出来るようになったこと
課題
- リストの操作方法の復習
- これを、GoogleColabとスプレッドシートを連携して出来るようにする
- 最後二つの参考URLにあるようにスプレッドシートから、検索も出来るようにしたい。
- HTMLのClass名が変わるとまた、出来なくなるので、Class名が変更しても柔軟にデータを取得出来るようにしたい。
参考文献
- PythonでGoogle検索タイトルとURL一覧を抽出してみた
- Locating Elements
- WindowsでCP932(Shift-JIS)エンコード以外のファイルを開くのに苦労した話
- 最後二つの参考URLにあるようにスプレッドシートから、検索も出来るようにしたい。
- 【Python】Googleの検索結果をスクレイピングできない時の対処法【解説付き】
次回の実装
CSVのリストを用意して、そこから検索ワードを読み込むプログラムを作成する。今回作成したプログラムと結合して、複数の検索ワードでの検索を容易に行えるようにする。
また、スプレッドシートを用いた、データの格納を出来るようにする。