Webスクレイピングによるデータ収集(BeautifulSoup、Scrapy)
機械学習プロジェクトでは、データの収集が重要なステップです。公開データセットが適切でない場合や、自分のプロジェクトに合ったデータが不足している場合、Webスクレイピングを利用してインターネット上からデータを取得することが有効です。この記事では、PythonでのWebスクレイピング手法として、BeautifulSoupとScrapyの2つの方法を解説します。
Webスクレイピングの流れを図で理解する

Webスクレイピングの基本
Webスクレイピングとは、Webページからデータをプログラムを使って自動的に抽出する技術です。Pythonでは、BeautifulSoupやScrapyなどのライブラリを使ってスクレイピングを行えます。
注意: Webスクレイピングを行う際は、対象サイトの利用規約やrobots.txtを確認し、適切な範囲で利用してください。サイトによってはスクレイピングを禁止している場合があります。
BeautifulSoupを使ったスクレイピング
BeautifulSoupは、PythonでHTMLやXMLを解析するためのライブラリです。Webページの構造を読み取り、特定の要素を簡単に抽出できます。
BeautifulSoupのインストール
BeautifulSoupとHTTPリクエストを送るためのrequestsライブラリをインストールします。
pip install beautifulsoup4 requests
BeautifulSoupを使った基本的なスクレイピングの流れ
ここでは、簡単なWebページから特定のデータを抽出する例を示します。
import requests
from bs4 import BeautifulSoup
# WebページのHTMLを取得
url = "https://example.com"
response = requests.get(url)
# BeautifulSoupを使ってHTMLを解析
soup = BeautifulSoup(response.content, "html.parser")
# タイトル要素を抽出
title = soup.find("title")
print(title.get_text())
このコードでは、指定したURLからHTMLを取得し、BeautifulSoupで解析しています。soup.find()を使って、HTML内の特定の要素(ここでは<title>)を抽出しています。
他の要素の抽出
BeautifulSoupでは、複数の要素や特定のクラス・IDを持つ要素も取得できます。
# クラス名が'sample'のすべてのdivタグを取得
divs = soup.find_all("div", class_="sample")
# 抽出した内容を表示
for div in divs:
print(div.get_text())
このコードでは、クラス名がsampleのdiv要素をすべて取得し、そのテキストを表示しています。
Scrapyを使ったスクレイピング
Scrapyは、Python用の高機能なWebスクレイピングフレームワークです。複数ページにまたがる大規模なデータ収集や、継続的なクローリングに適しています。
Scrapyのインストール
- Scrapyをインストールします。
pip install scrapy
Scrapyを使った基本的なスクレイピングの流れ
- Scrapyプロジェクトを作成します。
scrapy startproject myproject
Spiderを作成してスクレイピング処理を記述します。
import scrapy
class ExampleSpider(scrapy.Spider):
name = "example"
start_urls = ['https://example.com']
def parse(self, response):
title = response.css('title::text').get()
yield {'title': title}
このコードでは、指定したURLへアクセスし、ページタイトルを取得しています。
スクレイピングの実行
Scrapyプロジェクト内で以下のコマンドを実行するとクローリングが開始されます。
scrapy crawl example
クローリングが完了すると、取得したデータを出力したり、ファイルやデータベースへ保存したりできます。
BeautifulSoupとScrapyの違い
| 項目 | BeautifulSoup | Scrapy |
|---|---|---|
| 用途 | 小規模なスクレイピング | 大規模なスクレイピング |
| 学習コスト | 低い | やや高い |
| 複数ページ巡回 | 自前で実装 | 標準機能で対応 |
| 開発速度 | 手軽に開始できる | 大規模開発に向く |
Webスクレイピングを活用する場面
- ニュース記事やブログ記事の収集
- 商品情報や価格情報の収集
- 口コミやレビューの分析
- 機械学習用データセットの作成
Webスクレイピング時の注意点
- 利用規約の確認: スクレイピングを禁止しているサイトもあります。
- アクセス頻度: 短時間に大量のリクエストを送らないようにします。
- robots.txtの確認: クローリング対象として許可されている範囲を確認します。
- データ管理: 取得したデータは適切に保存・管理します。
まとめ
Webスクレイピングは、機械学習に必要なデータを収集する有力な方法です。小規模なデータ取得にはBeautifulSoup、大規模なデータ収集や継続的な運用にはScrapyが適しています。用途に応じて適切なツールを選択し、ルールを守りながらデータ収集を行いましょう。