【Python】Google検索の結果をスクレイピングでコピペしやすくする方法 | ムノログ 合同会社ムジンケイカクプロのITノウハウブログ
Pythonと機械学習

【Python】Google検索の結果をスクレイピングでコピペしやすくする方法

python Pythonと機械学習

既に以下で紹介するような良い作例や記事があったんですが、手元で調べている間に作ってしまったので公開します。

▼参考記事

【初心者向け】Pythonでスクレイピングする環境を作る⑤ Google検索をしてみる|Naruhiko|note

ColaboratoryでSeleniumが使えた:JavaScriptで生成されるページも簡単スクレイピング – Qiita

状況説明

ローカルPC内で使うスクレイピングツールの無料リクエストの限界がきてしまったため、自作で簡単にGoogle検索の結果をコピペしやすくします。
Google側は、スクレイピングを規約上禁止している認識なので、検索結果に大量にスクレイピングをかけることはやめたほうがいいはずです。
コピーペーストの補助のためのスクレイピングでした。

想定利用環境はこちら

Colaboratory へようこそ – Colaboratory

import requests
from bs4 import BeautifulSoup
try:
   # urlを代入
   url = "https://www.google.com/search?q=%E5%AE%85%E9%A3%B2%E3%81%BF+%E3%82%BB%E3%83%83%E3%83%88+%E3%83%86%E3%82%A4%E3%82%AF%E3%82%A2%E3%82%A6%E3%83%88&oq=%E5%AE%85%E9%A3%B2%E3%81%BF%09%E3%82%BB%E3%83%83%E3%83%88%09%E3%83%86%E3%82%A4%E3%82%AF%E3%82%A2%E3%82%A6%E3%83%88&aqs=chrome..69i57.7788055j0j0&sourceid=chrome&ie=UTF-8"
   # データ取得
   resp = requests.get(url)
   # 要素の抽出
   soup = BeautifulSoup(resp.text, "html.parser")
   tags = soup.find_all("h3")
   # タグ内テキスト
   for tag in tags:
       print(tag.get_text())
except:
   print("取得できませんでした")

実行すると出力は以下になります。

人気店の宅飲みセットを自宅にお届け!テイクアウト店情報 ... - エキサイト
人気店の宅飲みセットを自宅にお届け!テイクアウト店 ... - ニコニコニュース
【テイクアウト】家飲みセット⇒980円 | 居酒屋 魚炭 うおたん(居酒屋 ...
テイクアウト 宅飲みセット - 居酒屋 あじろ - グーペ
コロナに負けるな!宅飲み応援おつまみセット新登場! | 獏の棲む森の ...
たべものコンサル日記㉝「家飲みセット」「ファミリー夕食セット」販売を ...
てけてけテイクアウトメニュー
家飲みを楽しくするおつまみテイクアウトのすすめ 居酒屋さんを応援しよう ...
居酒屋 まる メニュー:宅飲み用持ち帰り - ぐるなび

h3タグ取得のためのカスタマイズ

h3を取得しにいっています。

!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=options)

try:
   # urlを代入
   url = "https://www.google.com/search?q=%E5%AE%85%E9%A3%B2%E3%81%BF+%E3%82%BB%E3%83%83%E3%83%88+%E3%83%86%E3%82%A4%E3%82%AF%E3%82%A2%E3%82%A6%E3%83%88&oq=%E5%AE%85%E9%A3%B2%E3%81%BF%09%E3%82%BB%E3%83%83%E3%83%88%09%E3%83%86%E3%82%A4%E3%82%AF%E3%82%A2%E3%82%A6%E3%83%88&aqs=chrome..69i57.7788055j0j0&sourceid=chrome&ie=UTF-8"
   driver.get(url)
   # 要素の抽出
   html = BeautifulSoup(driver.page_source, "lxml")
   tags = html.find_all('h3')
   # タグ内テキスト
   for tag in tags:
       print(tag.get_text())

   tags = html.select('span.st')
   # タグ内テキスト
   for tag in tags:
       print(tag.get_text())

except:
   print("取得できませんでした")