この記事では、Pythonを使い、コマンドラインから指定したキーワードでGoogle検索を行い、その上位いくつかの検索結果を自動的にブラウザの新しいタブで開く、という実用的なスクリプトの作成方法を解説します。
1. プロジェクトの概要と準備
このプロジェクトの目的は、「I’m Feeling Lucky」機能のように、検索結果のページを介さずに直接関連するウェブサイトを開くツールを自作することです。
requests
: Webページを取得します。 sys
: コマンドライン引数を読み取ります。 webbrowser
: Webブラウザを制御します。 bs4
(BeautifulSoup
): HTMLを解析します。
使用するサードパーティ製ライブラリをインストールします。
pip install requests beautifulsoup4
2. コマンドライン引数を取得し、検索を実行
まず、スクリプトはコマンドラインから検索キーワードを受け取ります。受け取ったキーワードを結合し、Google検索用のURLを構築して、requests
モジュールでそのページを取得します。
import requests
import sys
import webbrowser
import bs4
print("Googling...") # 検索中であることを表示
# User-Agentを設定して、通常のブラウザからのアクセスに見せかける
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}
# コマンドライン引数を結合して検索クエリを作成
search_query = ' '.join(sys.argv[1:])
google_url = f"https://www.google.com/search?q={search_query}"
# Googleにリクエストを送信
try:
res = requests.get(google_url, headers=headers)
res.raise_for_status() # エラーがあれば例外を発生させる
except requests.exceptions.RequestException as e:
print(f"エラーが発生しました: {e}")
sys.exit()
3. HTMLを解析し、検索結果のリンクを抽出
次に、取得したHTMLをBeautifulSoup
で解析し、検索結果のリンク部分を抽出します。Googleの検索結果ページのHTML構造は変わり得るため、CSSセレクタは適宜調整が必要になる場合がありますが、ここではdiv
タグ内のa
タグを狙います。
# BeautifulSoupオブジェクトを作成
soup = bs4.BeautifulSoup(res.text, 'lxml')
# 検索結果のリンク要素をCSSセレクタで取得
# このセレクタはGoogleのHTML構造の変更により、将来使えなくなる可能性があります
link_elements = soup.select('div.yuRUbf > a')
4. 上位の検索結果をブラウザで開く
最後に、抽出したリンクのリストから上位5件(または見つかった件数が5件未満の場合はその数だけ)を、webbrowser.open()
を使って新しいタブで開きます。
# 開くタブの数を決定(最大5件)
num_to_open = min(5, len(link_elements))
for i in range(num_to_open):
# href属性からURLを取得
url_to_open = link_elements[i].get('href')
print(f"Opening: {url_to_open}")
webbrowser.open(url_to_open)
5. 完成したコード全体
以下に、これまでのステップをすべて統合した完全なスクリプトを示します。search_google.py
などの名前で保存してください。
#! /usr/bin/env python3
# search_google.py - コマンドラインからGoogle検索を行い、結果を開く
import requests
import sys
import webbrowser
import bs4
# --- 1. 検索の実行 ---
print("Googling...")
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}
search_query = ' '.join(sys.argv[1:])
google_url = f"https://www.google.com/search?q={search_query}"
try:
res = requests.get(google_url, headers=headers)
res.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"エラーが発生しました: {e}")
sys.exit()
# --- 2. リンクの抽出 ---
soup = bs4.BeautifulSoup(res.text, 'lxml')
# 注: このセレクタはGoogleのHTML構造変更により将来使えなくなる可能性があります
link_elements = soup.select('div.yuRUbf > a')
# --- 3. ブラウザで開く ---
num_to_open = min(5, len(link_elements))
if num_to_open == 0:
print("検索結果が見つかりませんでした。")
else:
for i in range(num_to_open):
url_to_open = link_elements[i].get('href')
print(f"Opening: {url_to_open}")
webbrowser.open(url_to_open)
実行方法 ターミナルで以下のように実行します。 python search_google.py Python programming
まとめ
このスクリプトは、コマンドラインからの入力、Webリクエスト、HTMLの解析、ブラウザの制御という、PythonによるWeb自動化の基本的な要素を組み合わせた実用的な例です。これを応用することで、様々なWeb上の定型作業を自動化するツールを作成できます。