Python+Selenium+Beautiful Soup4のwebスクレイピング環境構築方法

  • 公開日:2018/10/19
  • 更新日:2018/10/19
  • 投稿者:n bit

PythonでSeleniumとBeautiful Soup4を使ったウェブスクレイピング用の環境構築方法を解説。この環境で今日からウェブスクレイピングを始めることができます。Seleniumを使ってブラウザ操作も行うため動的なページでもスクレイピングすることが可能です。

  • Python
  • 効率化

この記事は約 分で読めます。(文字)

Python + Selenium + Beautiful Soup4のウェブスクレイピング環境構築方法

pyenv環境にインストールしたPythonにSeleniumとBeautiful Soup4、lxmlをインストールしていきます。

pyenv環境にPythonのインストールが完了していない方は下記のページを参考にしてインストールしておいてください。

seleniumのインストール

pipでインストールできる最新バージョンのseleniumを検索します。

$ pip search selenium

出力結果




selenium (3.14.1) - Python bindings for Selenium


最新バージョンのseleniumをインストールします。

$ pip install selenium

インストールメッセージ

Collecting selenium

Using cached https://files.pythonhosted.org/packages/b0/c9/52390baa8d6b65c3e3b89f522c3a0fcf58f2b4faf37893ef9d97cddde699/selenium-3.14.1-py2.py3-none-any.whl
Requirement already satisfied: urllib3 in ./.pyenv/versions/3.6.6/lib/python3.6/site-packages (from selenium) (1.23)
Installing collected packages: selenium
Successfully installed selenium-3.14.1

「Successfully installed」と表示されていればインストール成功です。念のため正しくインストールされているかリストでも確認しておきます。

$ pip list

出力結果

Package             Version   

------------------- ----------



selenium 3.14.1

beautifulsoup4のインストール

pipでインストールできる最新バージョンのbeautifulsoup4を検索します。

$ pip search beautifulsoup4

出力結果




beautifulsoup4 (4.6.3) - Screen-scraping library


beautifulsoup4をインストールします。

$ pip install beautifulsoup4

インストールメッセージ

Collecting beautifulsoup4

Using cached https://files.pythonhosted.org/packages/21/0a/47fdf541c97fd9b6a610cb5fd518175308a7cc60569962e776ac52420387/beautifulsoup4-4.6.3-py3-none-any.whl
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.6.3

「Successfully installed」と表示されていればインストール成功です。念のため正しくインストールされているかリストでも確認しておきます。

$ pip list

出力結果

Package             Version   

------------------- ----------



beautifulsoup4 4.6.3

lxmlのインストール

pipでインストールできる最新バージョンのlxmlを検索します。

$ pip search lxml

出力結果




lxml (4.2.5) - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.


lxmlをインストールします。

$ pip install lxml

インストールメッセージ

Collecting lxml

Downloading https://files.pythonhosted.org/packages/e4/e4/75453295abd6dcd8f7b48c1eb092ce2c23c34ae08ca7acc8c42de35a5a78/lxml-4.2.5-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (8.7MB)
100% |████████████████████████████████| 8.7MB 2.3MB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.5

「Successfully installed」と表示されていればインストール成功です。念のため正しくインストールされているかリストでも確認しておきます。

$ pip list

出力結果

Package             Version   

------------------- ----------



lxml 4.2.5

Selenium環境用 ChromeDriverのインストール

Selenium環境で利用するブラウザにはGoogle Chromeを利用するためChromeDriverをインストールしておきます。

まだHomebrewのセットアップが完了していない方は下記ページをご参照の上インストールしておいてください。

Homebrewをアップグレードしておきましょう。

$ brew tap homebrew/cask

Chrome Driverをインストールします。

$ brew cask install chromedriver

これでChromeDriverのインストール作業完了です。

ChromeDriverのインストール方法の詳細に関しては下記のページで解説しています。

これで必要となる関連パッケージのインストール作業全て終了です。

ウェブスクレイピング環境の動作テスト

設定した環境が正しく動作するかテストしておきましょう。テストには下記のテスト用コードを利用します。

「Python + Selenium」版と「Python + Beautiful Soup4」版を用意していました。いずれもリストで指定URLページの['日付', 'url', 'タイトル', 'ディスクリプション']を返します。

テスト用コード:Python + Selenium のwebスクレイピング

Python + Selenium で行うwebスクレイピング用のテストコードです。実行するとGoogle Chromeが自動で起動し指定URLのページがブラウザを通してスクレイピングされます。

url = "https://・・・/" にスクレイピングしたいページのURLをセットしてください。

import requests

from selenium import webdriver
from selenium.webdriver.common.by import By
from datetime import date


class Detail:

def __init__(self):
pass

def get_all(self, url):

global driver

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome()

driver.get(url)

result = []

result.append(date.today())
result.append(url)
title_text = driver.title
result.append(title_text)
description_text = driver.find_element_by_xpath("//meta[@name='description']").get_attribute('content')
result.append(description_text)

return result


if __name__ == "__main__":
url = "https://・・・/"
detail = Detail()
result = detail.get_all(url)
print(result)
# ['日付', 'url', 'タイトル', 'ディスクリプション']

実行方法

上記のコードを「test_sel.py」と言う名前で任意のディレクトリに保存します。

ファイルを保存したディレクトリにCDコマンドを使って移動します。

$ cd 保存先のディレクトリのパス

保存ファイルをPythonで実行してください。

$ python test_sel.py

指定URLページのタイトル、ディスクリプションに合わせて実行した日付と指定したURLがリスト形式で表示されていれば正しく動作しています。

['日付', 'url', 'タイトル', 'ディスクリプション']

テスト用コード:Python + Beautiful Soup4 のwebスクレイピング

Python + Beautiful Soup4 で行うwebスクレイピング用のテストコードです。実行すると指定URLのページを直接スクレイピングします。

url = "https://・・・/" にスクレイピングしたいページのURLをセットしてください。

import requests

from bs4 import BeautifulSoup
from datetime import date


class Detail:

def __init__(self):
pass

def get_all(self, url):

result = []
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")

result.append(date.today())
result.append(url)
title_text = soup.head.title.text.strip()
result.append(title_text)
description_text = soup.head.find("meta", attrs={"name": "description"}).attrs['content']
result.append(description_text)

return result


if __name__ == "__main__":
url = "https://・・・/"
detail = Detail()
result = detail.get_all(url)
print(result)
# ['日付', 'url', 'タイトル', 'ディスクリプション']

実行方法

上記のコードを「test_bs4.py」と言う名前で任意のディレクトリに保存します。

ファイルを保存したディレクトリにCDコマンドを使って移動します。

$ cd 保存先のディレクトリのパス

保存ファイルをPythonで実行してください。

$ python test_bs4.py

指定URLページのタイトル、ディスクリプションに合わせて実行した日付と指定したURLがリスト形式で表示されていれば正しく動作しています。

['日付', 'url', 'タイトル', 'ディスクリプション']

今日のdot

Python + Selenium + Beautiful Soup4 でwebスクレイピングの環境構築を行っておけば静的なページだけではなく動的なページにも対応可能になります。柔軟なwebスクレイピングが行えるようになりますので両方の環境を使えるようにセットアップしておきましょう。

▲ ページの先頭へ戻る

このページの目次

目次