並列的なキーワードや特定のサイトを検索する場合、検索結果から該当記事を選択するのも面倒ですよね。
そこで今回は、Pythonを利用して検索時に自動で検索結果を開くスクリプトを紹介します。
今回やってみること
・検索結果の上位ページを自動で開く
・複数の検索を同時に行う
準備
Pythonの環境構築はもちろん、事前に下記をインストールしておく必要があります。
- Requests
- BeautifulSoup4
*RequestsはPythonでHTTPを取り扱う際によく使うモジュール
*BeautifulSoup4はHTMLやXMLデータからスクレイピングする際によく使うモジュール
1.Python3系の環境構築をする
*MacのPCにはデフォルトでPythonがインストールされていますが、今回はバージョン3.x以降が必要なので、別途インストール・設定が必要となります。
Python3系は、pyenv、virtualenv、Homebrewでインストール・管理する方法が主流です。
Python3系の環境構築の方法については、こちらの記事を参考にしてみてください。
[kanren postid=”1558″]
Hombrewのインストールがまだの方は、こちらを参考にしてみてください。
[kanren postid=”1519″]
*HomebrewはMac用のパッケージ管理ツールのこと
*pyenvはPythonのバージョンを管理できるライブラリのこと
*virtualenvはPythonの仮想環境作成ツールのこと
Pythonの環境設定はWeb上に記事がたくさんありますので、ご不明な際は各々で検索して実行してみてください。一応参考サイトも記載しておきます。
参考:超初心者でも出来る!MacにPython3のローカル開発環境を構築する方法|ハジプロ!
2.pipからRequestsをインストールする
pipを経由してRequestsをインストールします。
*pipはPythonのパッケージ管理ツールです。Homebrewを似たようなツールですが、それぞれインストールできるライブラリが違うので、併用します。
*pipはPython3.4以降であれば標準装備されているようです。(なので、pipのインストールについては割愛します。)
1 2 | #Requestsをインストール pip install requests |
*RequestsはPythonでHTTPを取り扱う際によく使うライブラリ
3.BeautifulSoup4をインストールする
pipを経由してBeautifulSoup4をインストールします。
1 2 | #BeautifulSoup4をインストール pip install beautifulsoup4 |
*BeautifulSoup4はHTMLやXMLデータからスクレイピングする際によく使うライブラリ
これで準備が整いましたので、スクリプトを作成していきます。
スクリプトを作成する
下記をコピペして【.py】ファイルを作成してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #! coding: UTF-8 #! python3 import requests, sys, webbrowser from bs4 import BeautifulSoup #検索キーワードを配列 array = [‘検索1’,‘検索2’,‘検索3’] for words in array: res = requests.get("https://google.com/search?q=" + words ) res.raise_for_status() #上位の検索結果のリンクを取得する soup = BeautifulSoup(res.text, "lxml") link_elems = soup.select(".r a") #各結果をブラウザのタブで開く(最上位の検索結果を表示する場合は1) num_open = min(1, len(link_elems)) for i in range(num_open): webbrowser.open("https://google.com" + link_elems[i].get("href")) |
これを今回は、mulautopen.pyと名前を付けて保存します。
*Pythonはインデントも重要な要素なので、変にいじらないように。
因みに…
最後に紹介する参考サイトのスクリプトを使うことで、コマンドライン引数をキーワードとした検索結果を表示することが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #! coding: UTF-8 #! python3 import requests, sys, webbrowser from bs4 import BeautifulSoup res = requests.get("https://google.com/search?q=" + " ".join(sys.argv[1:])) res.raise_for_status() #上位の検索結果のリンクを取得する soup = BeautifulSoup(res.text, "lxml") link_elems = soup.select(".r a") #各結果をブラウザのタブで開く(検索結果上位10サイトを開く) num_open = min(10, len(link_elems)) for i in range(num_open): webbrowser.open("https://google.com" + link_elems[i].get("href")) |
これを今回は、autopen.pyと名前を付けて保存します。
実行
先ほど作成したmulautopen.pyをターミナルから実行します。
1 2 3 4 5 | #mulsearch.pyを実行する python mulautopen.py #python3として設定している場合(Homebrew経由でPython3.xをインストールした方) python3 mulautopen.py |
autopen.pyをターミナルから実行する際はコマンド引数を入力してください。
1 2 | #mulsearch.pyを実行する python autopen.py 検索キーワード |
1 2 | #python3として設定している場合(Homebrew経由でPython3.xをインストールした方) python3 mulsearch.py |
*Homebrew経由でPython3.xをインストールすると、このようにコマンドを【python3】と指定しなければならない点が不便です。
(【python】コマンドでは、元々入ってるPython2.xで実行されてしまう)
注意事項
何十もの検索を同時に行う際は便利なのですが、Googleから不適切な検索行為だと判定されて警告がきます。
*ロボットでないことの確認だけなので、特に問題になることはないかと思います。
参考サイト
参考:【初心者のためのPython入門】Webスクレイピング|開発アプリブログ
まとめ
ドメインを指定してキーワードから記事を特定する、検索結果から特定の要素を抜き出すなど、応用の効くスクリプトではないかと思います。
機会があったらぜひ使ってみてください。
