ブログ

【Python解説】スクレイピングとは?仕組みや活用例と注意点

【Python解説】スクレイピングとは?仕組みや活用例と注意点

目次

※この記事にはプロモーションを含みます

WEBMASTERSのトップページへ

はじめに

「スクレイピングって便利そうだけど、どうやるの?」そんな疑問を持ったことはないでしょうか。

Webスクレイピングとは、Webサイト上のデータをプログラムで自動的に取得・収集する技術です。価格比較サイトの価格監視や、ニュース記事の一括収集、市場調査など、さまざまな場面で活用されています。中でもPythonはスクレイピングに最適な言語として広く使われており、少ないコードで強力な処理を実現できます。

この記事では、スクレイピングの基本概念から、Pythonによる実装手順(Requests・BeautifulSoup・Selenium)、法律面の注意点まで体系的に解説します。初めてスクレイピングに挑戦する方でも、読み終えた後に実際のコードを書き始められる内容を目指しました。

スクレイピングとは?

まずはスクレイピングの基本的な概念を整理しましょう。混同されやすい「クローリング」との違いも合わせて確認します。

スクレイピングとは

Webスクレイピングの定義と仕組み

Webスクレイピングとは、Webサイトに表示されているデータをプログラムで自動的に読み取り、必要な情報だけを抽出・収集する技術です。人間がブラウザで行う「ページを開いて情報を見つけてコピーする」作業を、プログラムに任せるイメージです。

スクレイピングの基本的な流れは以下のとおりです。

1.対象のWebページにアクセスしてHTMLを取得する
2.取得したHTMLを解析して必要な要素(テキスト・リンク・画像URLなど)を抽出する
3.取得したデータをファイルやデータベースに保存する

HTMLはWebページの骨格となる文書であり、タグ(<h1><p><a>など)で構造化されています。スクレイピングでは、このタグの構造を利用して目的のデータを特定します。

クローリングとスクレイピングの違い

「クローリング」と「スクレイピング」は混同されやすいですが、指している動作が異なります。

用語意味
クローリングWebサイトのリンクを辿りながらページを巡回・収集すること
スクレイピング収集したページから必要なデータを抽出すること

たとえばGoogleの検索エンジンは、クローラーと呼ばれるプログラムがWebサイトを巡回(クローリング)し、そのページの内容を分析(スクレイピング的処理)してインデックスを作成しています。

実際の自動化ツール開発では、クローリングとスクレイピングを組み合わせて使うケースが多く、「複数ページを巡回しながらデータを抽出する」という構成が一般的です。

スクレイピングでできる主な活用例

スクレイピングは多くの分野で実用されています。具体的な活用例を知ることで、自分のプロジェクトへの応用イメージがつかみやすくなります。

データ収集・価格比較・市場調査

スクレイピングの最も代表的な用途がデータの自動収集です。以下のような場面で活用されています。

  • ECサイトの商品価格を定期的に取得して価格変動を監視する
  • 競合他社のWebサイトを巡回して製品情報や料金プランを比較する
  • ニュースサイトやSNSから特定キーワードに関する記事を収集する
  • 不動産・求人サイトの掲載情報を一括で集めてデータベースを構築する

たとえばECサイトの価格監視では、毎日手動でチェックしていた作業をスクレイピングで自動化することで、担当者の工数を大幅に削減できます。

業務自動化とレポート作成への応用

データ収集だけでなく、業務プロセスの自動化にも活用できます。

  • 社内システムや外部Webサービスからデータを定期取得してExcelレポートを自動生成する
  • 公的機関(国税庁・総務省など)の公開データを定期収集してダッシュボードに反映する
  • 採用サイトの求人情報を自動収集して求人トレンドを分析する

こうした業務自動化は、エンジニアのスキルとして高く評価される分野でもあります。Pythonスクレイピングを習得すると、自分の業務課題を自力で解決できる幅が広がります。

PythonでのWebスクレイピング基礎(Requests + BeautifulSoup)

Pythonでスクレイピングを行うには、いくつかのライブラリを組み合わせて使います。最も基本的な組み合わせが「Requests」と「BeautifulSoup」です。

環境準備とライブラリのインストール

スクレイピングに必要なライブラリをインストールします。Pythonがインストール済みであれば、以下のコマンドで準備できます。

pip install requests
pip install beautifulsoup4

または1行でまとめてインストールすることもできます。

pip install requests beautifulsoup4

インストール後は以下のコマンドで確認できます。

pip list

一覧にrequestsとbeautifulsoup4が表示されていれば準備完了です。

Requestsを使ってWebページを取得する

Requestsは、HTTPリクエストを簡単に扱えるライブラリです。requests.get()を使うことで、指定したURLのHTMLを文字列として取得できます。

import requests

url = "https://example.com"
response = requests.get(url)

# ステータスコードを確認(200なら成功)
print(response.status_code)

# HTMLを表示
print(response.text)

ステータスコード200はリクエスト成功を意味します。403や404が返ってくる場合は、アクセスが拒否されているか、ページが存在しない可能性があります。

また、スクレイピングであることを隠さないためのUser-Agentの設定も重要です。

headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)

BeautifulSoupを使ってデータを抽出する

BeautifulSoup(bs4)は、取得したHTMLを解析して特定の要素を抽出するライブラリです。Requestsと組み合わせて使うのが基本です。

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# ページタイトルを取得
title = soup.find("title").text
print(title)

# すべてのh2見出しを取得
headings = soup.find_all("h2")
for h in headings:
    print(h.text)

# リンク一覧を取得
links = [a["href"] for a in soup.find_all("a", href=True)]
print(links)

BeautifulSoupのfind()は最初の1件、find_all()はすべての要素を返します。タグ名・CSSクラス・idなどで絞り込みが可能です。

# class="article-title"の要素を取得
articles = soup.find_all("p", class_="article-title")

これだけで、Webページから構造化されたデータを取り出す基本的なスクレイピングが実装できます。

Seleniumを使った動的ページのスクレイピング

Requestsだけでは取得できないページも存在します。そのような場合に使うのがSeleniumです。

RequestsとSeleniumの使い分け

向いているページ特徴
Requests + BeautifulSoup静的なHTMLページ高速・シンプル・軽量
SeleniumJavaScriptで動的に生成されるページ実際のブラウザを操作

たとえばSPA(シングルページアプリケーション) や、スクロールすることで追加読み込みされるコンテンツ、ログインが必要なページなどはRequestsだけでは対応できません。これらにはSeleniumが必要です。

Seleniumの基本的な使い方

まずSeleniumをインストールします。

pip install selenium

ChromeブラウザでSeleniumを使う場合、ChromeDriverも必要です。最新版のSelenium(v4.6以降)では自動でドライバーを管理する機能が組み込まれているため、別途インストール不要です。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Chromeブラウザを起動
driver = webdriver.Chrome()

# ページを開く
driver.get("https://example.com")

# 特定の要素が表示されるまで最大10秒待機
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "main-content")))

# テキストを取得
print(element.text)

# ブラウザを閉じる
driver.quit()

Seleniumはブラウザを実際に起動するため、Requestsより処理が重くなります。動的なコンテンツが必要な場合にのみ使い、静的なページはRequests + BeautifulSoupで処理するという使い分けが効率的です。

スクレイピングの注意点とルール

スクレイピングの注意点

スクレイピングは強力な技術ですが、使い方を誤ると法律違反や倫理的問題に発展することがあります。必ず以下の点を守って実施してください。

robots.txtとサイトの利用規約を確認する

ほとんどのWebサイトにはrobots.txtというファイルが設置されており、クローラーへのアクセス許可範囲が記載されています。

# robots.txtの確認例(ブラウザでアクセス)
https://example.com/robots.txt

robots.txtには以下のような記述があります。

User-agent: *
Disallow: /admin/
Disallow: /private/

Disallowに指定されたパスへのアクセスは禁止されています。robots.txtを無視してアクセスすることは、規約違反となる場合があります。

また、サイトの利用規約でスクレイピングを明示的に禁止しているケースもあります。スクレイピング前に必ず利用規約を確認し、許可されていない場合は実施しないようにしてください。

過度なアクセスや著作権侵害に注意する

スクレイピングでは以下の点にも注意が必要です。

  • 短時間に大量のリクエストを送るとサーバーに負荷をかけ、不正アクセス(DoS攻撃) に該当する可能性がある
  • リクエストの間隔を設けて(time.sleep(1)など)、サーバーへの配慮を忘れない
  • 取得したデータを無断で公開・転載すると著作権法に違反する場合がある
  • 個人情報(氏名・メールアドレスなど)を含むデータの収集・利用は個人情報保護法の対象となる
import time
import requests

urls = ["https://example.com/page1", "https://example.com/page2"]

for url in urls:
    response = requests.get(url)
    # 処理
    time.sleep(1)  # 1秒待機してサーバーへの負荷を軽減

スクレイピングは「できること」と「やっていいこと」は別物です。技術的に可能であっても、法律・規約・倫理に反する行為は避けてください。

まとめ

Webスクレイピングは、Webサイトからデータを自動収集する技術であり、価格監視・市場調査・業務自動化など幅広い用途で活用されています。Pythonでは「Requests」「BeautifulSoup」「Selenium」の3つのライブラリが定番であり、静的ページには前者2つ、JavaScriptで動的に生成されるページにはSeleniumを使い分けるのが基本です。

一方で、スクレイピングを行う際はrobots.txtや利用規約の確認、サーバーへの負荷軽減、著作権や個人情報保護への配慮が必須であり、ルールを守った上での活用が求められます。スクレイピングを習得すると、データ駆動の業務改善や自動化ツールの開発など、実践的なプログラミングスキルの幅が大きく広がるでしょう。