本記事では、Python×seleniumでスクレイピングをしてみたいと思います。
Contents
seleniumとは
seleniumとはGoogle Chromeなどのブラウザーを自動で制御するためのモジュール(部品)です。人間がブラウザを操作するときに行う動作を全て行うことができます。
例えば、以下のようなことができます。
- 検索
- クリック
- 入力
- 画像の抽出
- 文章の抽出
webスクレイピングとは
webスクレイピングとは、webから自動でデータ収集することです。ちなみに「スクレイプ」とは、英語で削るという意味です。
世界中に広がる膨大な情報ネットワークから、欲しいデータを削り取ることができれば、生活を効率化できるかもしれません。
例えば、家賃5万円以下で、2DKのアパートを探したい時も、画面にかじりついて体力と視力を消耗する必要はありません。
複数のサイトから、値段と間取りの文字を「スクレイピング」して、自分の探したい条件の詳細ページを勝手に開いておいてくれるようなプログラムも簡単に実装できます。
seleniumの基礎
本記事では、Pythonでseleniumを使う方法を解説していきます。
seleniumのインストール
pipでseleniumをインストールしましょう。
$ pip install selenium
ドライバーのインストール
seleniumを使う場合は、どのブラウザを使うかによって、下準備の方法がちょっと違います。
本記事では、Google Chromeを自動で制御していきましょう!
下準備として、以下の記事をもとにChromeDriverをインストールしてください。
ブラウザを立ち上げる
まずは、自動でブラウザを立ち上げましょう。
from selenium import webdriver #モジュールのインポート
browser = webdriver.Chrome() #ブラウザの立ち上げ
Windowsの場合は、立ち上げの方法だけ違います。先程紹介したの記事にある通り、chromedriver.exeをPythonのファイルと同じ階層のフォルダに設置したら、以下のコードを記述します。
from selenium import webdriver #モジュールのインポート
browser = webdriver.Chrome('chromedriver.exe')
URLでウェブサイトを開く
URLから、サイトに飛ぶためにはgetメソッドを使用します。
from selenium import webdriver #モジュールのインポート
browser = webdriver.Chrome() #ブラウザの立ち上がる
browser.get('https://news.google.com/topstories?tab=wn&hl=ja&gl=JP&ceid=JP:ja') #google newsを開く
上のコードだと、グーグルニュースのトップページが開かれます。
HTMLの要素を取得する
HTMLのidやclassを用いて、要素を取得することは、スクレイピングにおいて最重要項目です。
browser.find_element_by_class_name('CLASS-NAME') #classで要素を取得
browser.find_element_by_id('ID-NAME') #idで要素を取得
browser.find_element_by_tag_name('TAG-NAME') #タグで要素を取得
実例を見てみましょう。
from selenium import webdriver #モジュールのインポート
browser = webdriver.Chrome() #ブラウザの立ち上がる
browser.get('https://news.google.com/topstories?tab=wn&hl=ja&gl=JP&ceid=JP:ja') #google newsを開く
top = browser.find_element_by_class_name('DY5T1d') #クラスでトップ記事の見出しを取得
top.text #タグの中身の文字を取得
このコードを実行すると、見出しの文字列が取得できます。↓
クラスの取得方法は、「目的の要素を右クリック」→「検証」で確認できます。
フォームに入力
例えば、Googleの検索窓で文字を自動で入れて検索したい場合もあるでしょう。そんな時は、次の方法でできます。
from selenium import webdriver #モジュールのインポート
from selenium.webdriver.common.keys import Keys #キーボード操作のためのモジュール
browser = webdriver.Chrome() #ブラウザの立ち上がる
browser.get('https://google.com') #google newsを開く
search = browser.find_element_by_tag_name('input') #タグの名前で検索窓要素を取得
search.send_keys('Tommy Emmanuel') #検索窓にTommy Emmanuelと入力
search.send_keys(Keys.ENTER) #エンターキーを押す
webdriverに加えて、Keysというモジュールを入れれば、キーボード操作をすることができます。
フォームに入力するにはsend_keys(”)メソッドを使います。上のコードを実行すると、自動で次のような画面が開きます。
クリックをする
seleniumでクリックするには、.click()メソッドを使います。先程の、Tommy Emmanuelの検索結果の一番上をクリックしてみます。
tommy = browser.find_element_by_class_name('LC20lb') #HTMLオブジェクトを取得
tommy.click() #クリック
すると、Wikipediaのトミーエマニュエルさんのページが開けます。
seleniumのまとめ
seleniumを使えば、いろんなことができそうですね。今回紹介したのは、本当に基本的な部分だけで、この他にもできることは膨大にあります。
参考サイト:seleniumクイックリファレンス
↑こちらのサイトが、大変参考になります。seleniumを使うための全てが詰まっているので是非覗いてみてください。
プログラミングが今よりも盛んになったら、ググるという言葉は無くなるかもしれません。「昨日さ、推しのTwitterセレって全20000ツイートCSVファイルで保存した」なんて会話が普通になっているかもしれませんね。