Pythonでスクレイピング(1)seleniumの導入とh1要素のテキストを取得する

Pythonでスクレイピング(1)seleniumの導入とh1要素のテキストを取得する

スクレイピングとは

クローラーとスクレイピングは似たようなことをするので混同されてしまいますが、大きく違いがあります。
クローラーとは自動的にWebページの情報を収集して回るプログラムのことをいいます。そしてスクレイピングは、やはり自動的にWebページの情報を収集して回りますが、それに留まらずに収集した情報を解析して必要な情報だけを収集することをいいます。

スクレイピングする際に守らなければならない事は、収集するWebサイトの規約を守ることやサーバーの負荷を考慮して適切なアクセス回数にすることなど気を配る必要があります。また、著作権の問題も出てきますので収集したものを無条件に公表することは避けなければなりません。

seleniumを使用してブラウザの操作

今回使用するライブラリはseleniumを使用します。これはブラウザを操作するためのライブラリです。
seleniumだけではブラウザを操作することはできません。操作するためのブラウザのドライバを導入しておく必要があります。

また、画像を処理するためには別途、画像処理ライブラリPillowを導入する必要があります。これはリサイズや回転、トリミングなどを行うことができるものです。
Pythonでスクレイピングするためには通常seleniumを導入しておきます。

ライブラリのインストール

seleniumをインストールするには。pip3を使います。

  pip3 install selenium

次にPillowのインストールを行います。こちらもpip3で導入します。

  pip3 install pillow

seleniumとPillowの導入が終わるとJupyter Notebookでブラウザを操作します。

まずはseleniumのインポートを行います。

from selenium import webdriver

次にPillowのインポートを行います。

from PIL import Image

次に、FirefoxやChromeをPythonで呼び出します。

Firefoxの呼び出し

Pythonで呼び出すには、gekodriverが導入する必要があります。Macの場合は、ターミナルに以下コマンドでインストールします。

brew install geckodriver

もしエラーが出たら、それはHomebrewの書き込み時に書き込み権限がないと言われるエラーの場合があります。その場合「sudo chown -R $(whoami) /usr/local/include /usr/local/lib /usr/local/lib/pkgconfig /usr/local/share/man/man3」などとアドバイスが表示されていますのでそれを実行すると解決すると思います。

これでFirefoxを開くことができます。
jupyter notebookには次の通り記述します。

browser = webdriver.Firefox()

Chromeの呼び出し

同様にChromeのドライバも導入しておきます。ターミナル以下を実行します。

brew install chromedriver

Chromeの起動は以下をjupyter notebookに入力します。

browser = webdriver.Chrome()

アドレスを指定してブラウザを開く場合は次のように指定します。

	
browser.get('https://itstudio.co')

ブラウザを閉じる時は次のようにします。

browser.quit()

h1要素のテキストを取得する

それではIT工房のTOPページのh1要素からそのテキストを取得してみます。
もう一度、新規でJupyter Notebookを開きます。
seleniumのインポートからJupyter Notebookに記述していきます。今回は画像の取得はありませんので、Pillowのインポートは省きます。

from selenium import webdriver

続いて、ChromeブラウザをPythonから開きます。

browser = webdriver.Chrome()

PythonからIT工房のアドレスを呼び出します。

browser.get('https://itstudio.co')

IT工房TOPページのh1の情報を取得します。これはJavaScriptのDOM操作によく似ています。要素の取得方法にはidを指定する以外にも様々な方法があります。これらの方法は別途説明します。

elem_h1 = browser.find_element_by_id('logo')

取得したh1要素のテキストをJupyter Notebookに表示させます。

elem_h1.text

もっとも簡単なスクレイピングの例で通常のページから特定の要素内容を取得する例でした。