スクレイピングは情報を「抽出」すること
スクレイピングとは「何らかのデータ構造から抽出すること」を指します。
簡単に言うと「プログラム間でやり取りされるデータ」の中から、人が読める内容を抽出することです。
データスクレイピングのうち、WEB上の情報に絞ったものを「WEBスクレイピング」といいます。
クローリングはWEB上を「巡回」すること
クローリングは「WEB上をプログラミングで巡回すること」を指します。
WEB上を巡回する上で何をするかは、クローリングの目的次第ですが、多くの場合は情報収集のために実行されています。
つまり、クローリング=WEB上を巡回して情報を収集することとして扱われます。
pythonではクローリングを簡単に実装できる
クローリングツールを作成するための言語は多く存在していますが、中でもpythonがオススメです。
少しでもプログラミングをしたことがある方であれば、pythonは非常に簡単にやりたいことが実装できます。
Selenium WebDriverを使ってクローリングする
一番手っ取り早い方法です。
Selenium WebDriverを使えるようにするための手順を以下に記します。
Selenium WebDriver(Chrome Driver)の導入手順
1.Chromeのバージョンを確認する
Chromeを立ち上げ、画面右上の三点を押し、「ヘルプ」→「Google Chromeについて」をクリック。
ここに記載されているバージョンを記録しておいてください。
2.Chromeのバージョンと一致するChromeDriverをダウンロードする
ChromeDriverはChromeのバージョンと一致したものでないと動作しません。
必ずバージョンの一致したChromeDriverをダウンロードしましょう。
3.ダウンロードしたEXEファイルをフォルダに格納して環境変数を割り当てる
Windowsの場合、画面左下の検索窓に「環境変数」と入力すると「システム環境変数の編集」が表示されます。
黄色い下線を引いた「環境変数」をクリックし、「Path」を選択して「編集」をクリック。
「新規」を押して「ChromeDriver.exe」を保存したフォルダを入力して「OK」を押してください。
4.Seleniumをインストール
WindowsもMacも以下のコマンドを入力してSeleniumをインストールしてください。
pip install selenium
5.テストコードを作成する
from selenium import webdriver
driver = webdriver.Chrome() # 環境変数を設定しない場合はEXEファイルのパスを引数に指定してください
driver.get('https://www.google.com/')
6.テストコードを実行する
python test.py
いろいろなサンプルコード
非headlessモードでテストしてみる
サンプルコードの動き
- Chrome が立ち上がり、5秒後に ChromeDriver という文字列でGoogle検索が行われます。(Chromeのウィンドウには「Chrome は自動テスト ソフトウェアによって制御されています。」と表示されます。)
- さらに5秒経つと自動で閉じます。
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.google.com/')
time.sleep(5)
search_box = driver.find_element_by_name("q")
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5)
driver.quit()
headless モードのテストをしてみる
driver = webdriver.Chrome()
のあたりを以下のように変更します。
ブラウザが表示されなくなり、動いているかわからないため、途中でウェブページのタイトルを表示しつつ、スクリーンショットをとってみます。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get('https://www.google.com/')
print(driver.title)
search_box = driver.find_element_by_name("q")
search_box.send_keys('ChromeDriver')
search_box.submit()
print(driver.title)
driver.save_screenshot('search_results.png')
driver.quit()