1. TOP
  2. ブログ
  3. Pythonを使ったスクレイピング

Pythonを使ったスクレイピング

スクレイピングとは、ざっくり言えばウェブページからの情報抽出です。
例えば、あるウェブサイトに掲載されているデータを、CSV等で自分なりに保存したいとします。

データが少ない場合は良いのですが、何千件とデータが存在する場合、手作業では非常に時間がかかるのは言うまでもありません。
また、沢山のサイトから情報を取得する必要があったり、定期的に保存が必要になった場合なども、人力では大変です。

このような場合に活躍するのがスクレイピングです。

スクレイピングには大まかに、2つの方法があります。
・Chrome等のウェブブラウザを立ち上げ、プログラムでその動きを自動化・制御する
・ウェブブラウザを使わず、プログラムのみでHTMLの取得・解析を行う

ウェブブラウザを使わない方法として簡単なものは、「requests」と「BeautifulSoup」を使う方法です。
流れとしては、
・requestsでサーバへリクエストを送り、HTMLを受け取る
・BeautifulSoupでHTMLを解析し、必要な部分だけ抽出する
という流れになります。

それぞれのライブラリは、以下のようにインストール可能です。

pip install requests
pip install beautifulsoup4

例として、Python Japanのサイトからニュースを抽出してみましょう。
pythonjapan

import requests
from bs4 import BeautifulSoup


result = requests.get("http://www.python.jp/category/news.html")
soup = BeautifulSoup(result.content)
titles = soup.find_all("h1")
for title in titles:
    print(title.text)

実行結果

PYTHON.JPのメーリングリストについて
『入門Python 3』『実践Python 3』が出版されました
Python 3.5 リリース
書籍『Cython――Cとの融合によるPythonの高速化』が発売になります
Python 3.5.0 b1 リリース
Python 2.7.10 リリース
Pythonドキュメント翻訳プロジェクト サイト移転
【書籍】Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!] (Software Design plus)
Python 3.4.3 リリース
【書籍】Pythonプロフェッショナルプログラミング 第2版

このように、非常に簡単に抽出ができました。

次はウェブブラウザを立ち上げる方法、「Selenium」を使ってみます。

pip install selenium

Seleniumのインストールも、pipで簡単に行えます。

from selenium import webdriver


driver = webdriver.Firefox()
driver.get("http://www.python.jp/category/news.html")
titles = driver.find_elements_by_tag_name("h1")
for title in titles:
    print(title.text)
driver.close()

上記のコードを実行すると、実際にFirefoxブラウザが立ち上がり、ニュースのタイトルを表示し終わるとブラウザが閉じます。
次に、これらの使い分けについてです。

requestsで受け取るHTMLはあくまでHTMLのソースである点に注意です。
そのためJavaScriptで動的にHTMLを変えているページでは思うように抽出ができません。
ですが、Pythonプログラムのみで完結するため、非常に動作は速いです。

一方、Seleniumはブラウザを立ち上げるため、JavaScriptで動的にHTMLを変えていても、対応可能です。
また、スクリーンショット機能やHTMLの読み込みを待つといった便利な機能もあります。
ブラウザの動きをリアルタイムで見れるため、バグ等の発見も容易です。
しかし、実効速度はブラウザを使わない方法に比べると遅くなります。

どちらを使うか悩む場合は、まずrequests+BeautifulSoup等を試し、上手く抽出ができなければSeleniumに切り替える、
といった方法でも良いでしょう。

    カテゴリ一覧

    PAGE TOP