Python でウェブ検索を行い、検索結果を自動取得するサンプルコードをまとめておきます。
以下の環境で動作確認をしています。
環境: Windows パソコン, Microsoft Edge (ブラウザのバージョンに対応するドライバーをダウンロード済み), Python 3.X, selenium (+Anaconda)を設定済み
背景 ~ 自動化のすすめ!
Python が有望視されている一つの分野として、自動化があります。ロボット化、AI 化ということです。
自動化に関し、最も簡単に着手できる事例としては、ウェブサイトの自動操作があります。
selenium などの自動化ツールをインストールすると、ウェブサイトを自動で動かすことが可能です。
ところが、selenium を使った自動検索についてネット検索してみると、大半が、検索を実行するところまでの事例になっています。ウェブ検索後の結果取得について書かれたサイトは少ないようです。
検索結果が取得できないのでは、実用上、役に立ちません。
ということで、ウェブ検索から結果取得までを行うサンプルスクリプトとポイントについてまとめ、公開しておくことにします。
注意点
以下は、キーワードを指定するとウェブにアクセスして、検索結果のタイトルと詳細の記載を取得するサンプルコードの一例です。
Google 検索は誰でも知っており、スクリプトの説明のため、例示しています。実際に使用する場合は、アクセス先のサイトの規定でウェブスクレイピングに制限がある場合がありますので、規定をよく確認してください。また、サーバーに負荷をかける可能性がありますので、sleep で記載している時間を十分に長く取って使用するようにしてください。
使い方
① PC で使用しているブラウザと、そのバージョンを確認し、ブラウザを作成している企業のホームページから、自動操作のためのドライバをダウンロードし、フォルダに入れておきます。([1] の部分)
下記の例では、path0 の場所に Microsoft のホームページからダウンロードした Microsoft Edge 用ドライバを入れています。ブラウザのバージョンと、ドライバのバージョンが対応している必要があります。違っていると動かないと思います。
② つぎに、デスクトップ等にフォルダを作って、webscraping1.py 等の名前でテキストファイルを作り、下記のスクリプトをコピー&ペーストして保存してください。
①のドライバの保存先に応じて、path0 の記載を修正してください。
③ 準備ができたら、コマンドプロンプトなどから、Python のスクリプトを実行してみてください。
例: python (パス+) webscraping1.py
指定したキーワードで Google 検索をして、タイトルと記載された事項をそれぞれ取得できると思います。
④ ②の内容を修正して使用してみてください。
例えば、[2] のキーワードを変えてください。
また、サイトのどの部分を取得するかにより、xpath を確認・取得して、書き換えれば、好きな場所をダウンロードできると思います。(xpath の取得方法はここでは割愛します。)
まとめ
Python で自動でウェブサイトにアクセスし結果を取得するスクリプト例についてまとめました。
コピー&ペーストで動いたら、内容を書き換えて応用してください。
なお、検索サイトでよく使う便利な検索式を以下の関連リンク「検索方法のまとめ」に挙げています。
サンプルコードがうまく動いたら、たとえば、検索式の部分を同リンクの検索式と組み合わせてみてください。かなり高度なウェブスクレイピングができると思います。
関連リンク
・ 画面のクリック、文字の入力を自動化する 【Python & pyautogui】
・ よく使う検索方法のまとめ 【Google】
・ Webスクレイピングが動かなくなったとき 【Microsoft Edge & selenium】
・ 動画のダウンロード方法に関するまとめ
・ 指定した URL からリンクを抽出する 【Python】
・ 指定したサイトマップからリンクを取得する 【Python】
・ Webスクレイピング時のパッケージの使い分け 【requests vs. selenium】
・ Raspberry Pi でブラウザを自動操作してみる 【Python】
・ バッチファイルで Anaconda から Python を実行する 【Windows】
サンプルコード webscraping1.py
# -*- coding: utf-8 -*-
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
def get_items1( driver1, xpath1, len1 ):
elem1 = driver1.find_elements_by_xpath( xpath1 )
str1 = ""
for i1 in range( len( elem1 ) ):
str2 = elem1[i1].text.strip()
if len( str2 ) > len1:
str1 = str1 + str2 + "\n"
sleep( 5 )
return str1
path0 = "C:/user/edgedriver_win64/msedgedriver.exe" # [1] Windows Edge driver
driver = webdriver.Edge( path0 )
str1 = "python" # [2] search word
driver.get('https://www.google.com/') # [3] web site
search_box = driver.find_element_by_name( "q" )
search_box.clear()
search_box.send_keys( str1 + Keys.ENTER )
sleep( 2 )
xpath1 = '//a/h3/span' # [4] xpath
str1 = get_items1( driver, xpath1, 5 )
print( str1 )
print( "" )
xpath1 = '//div/div/div/span/span' # [5] xpath
str1 = get_items1( driver, xpath1, 25 )
print( str1 )
driver.quit()