PythonにおけるWebスクレイピングについて

最終更新日: 2026年8月7日

「Webスクレイピング」とは、Webサイトから自分が欲しい情報を絞り込み収集する技術です。「Webクローリング」とも呼ばれています。Webスクレイピングは大きく「取得」と「解析」の二段階で構成されます。Webスクレイピングは様々なプログラミング言語で可能ですが、本記事では、Pythonを使用したWebスクレイピングの方法について紹介します。

Python Webスクレイピングの手順

Webスクレイピングは、大きく3つのステップで行います。

1、Webサーバにページを表示する情報を取得するためのリクエストを送ります。
Pythonでは、Webサーバから情報を取得する際に必要なHTTP通信を手軽に行うためのサードパーティ製の「requests」ライブラリを使用します。

2、受け取ったレスポンスのHTMLから自分の欲しい情報を見つけます。
情報を取得した段階では、ページ全体が取得され必要な情報以外の情報が多く含まれ、タグ記法が入り組んだ状態のためそのまま読み取ることは困難です。Pythonでは、HTMLやXML形式を解析し扱いやすい形態に絞り込むために便利な「BeautifulSoup」ライブラリを使用して、HTMLの中から自分に必要な情報を見つけ出し、絞り込みます。

3、見つけ出した必要な情報を使いやすい形式で出力します。
自分に必要な情報を抜き出すことができたら、そのデータを活用するために、データを扱いやすい形式に変換し、表示したり、ファイルやデータベースに保存する作業が必要です。出力形式にもよりますが、「format」メソッドを使用し表示したり、テキストファイルへの書き出し、ライブラリを用いたエクセルファイルやデータベースへの保存など様々な方法があります。

Webスクレイピング プログラムを書き始める前の準備

「requests」ライブラリのインストール

Pythonの「requests」ライブラリをインストールするため、ターミナルから以下のコマンドを実行します。

> pip install requests
※macOSの場合は「pip3 install」と入力し実行します。

インストール完了後、インタラクティブシェル(対話型シェル)を起動しライブラリの動きを確認します。
(インタラクティブシェルを起動)

> python
※macOSの場合は「python3」と入力し実行します。

(requestsライブラリのインポート)

>>> import requests
>>>

インポート実行後、何も出力されなければインストール成功です。エラーメッセージが表示された場合インストールに失敗しているので再度ターミナルからインストールを試みます。
(インタラクティブシェルの終了)

>>> quit()

「BeautifulSoup」ライブラリのインストール

Pythonの「BeautifulSoup」ライブラリをインストールするため、ターミナルから以下のコマンドを実行します。最新版は「BeautifulSoup4」という名称でPyPIに登録されています。

> pip install BeautifulSoup4
※macOSの場合は「pip3 install」と入力し実行します。

インストール完了後、インタラクティブシェル(対話型シェル)を起動しライブラリの動きを確認します。
(インタラクティブシェルを起動)

> python
※macOSの場合は「python3」と入力し実行します。

(BeautifulSoupライブラリのインポート)

>>> from bs4 import BeautifulSoup
>>>

「BeautifulSoup」ライブラリは「bs4」パッケージに入っていますので「from bs4」を指定します。「requests」ライブラリ同様、何も出力されなければインストール成功です。

Webスクレイピング Webページからテキスト情報を取得する方法

「requests.get」の引数にWebページのURLを指定し、結果を変数(result)に代入します。実行後「response[200]」と実行結果表示されれば問題なく処理されています。

>>> result = requests.get(' URL ')

変数に「.text」を使用することでテキスト情報を取得することができます。

>>> result .text

ここまでをPython実行形式ファイル(.py)にすると下記の通りです。

import requests
result = requests.get(' URL ')
print(result.text)

作成したPython実行形式ファイル(.py)を「Documents」に保存し、ターミナルでスクリプトファイルとして実行すると、ファイル内で指定されたWebページのHTMLが表示されます。

>python Document/ [ファイル名].py
※macOSの場合は「python3」と入力し実行します。

Webスクレイピング 取得した情報を解析・出力する方法

Pythonを用いて情報を取得しただけでは余計な情報が多く、そのままでは読み取ることが困難です。そのため先ほど取得したHTMLの解析をPythonのサードパーティ製ライブラリである「BeautifulSoup」を使用して行っていきます。

「BeautifulSoup」は2つの引数を指定します。第一引数には、解析対象のHTMLを文字列で指定します。この時、「requests」ライブラリで取得したHTML情報を渡します。「.text」をつけることで文字列を取り出すことができます。第二引数では、解析の際の処理の種類を指定します。処理の種類には、標準ライブラリ(html.parser等)の他にサードパーティ製(lxml、html5lib等)のものがあります。それぞれ処理速度や得意な処理等が異なっています。「BeautifulSoup」から返される結果のオブジェクトを変数(data1)に代入します。

>>> data1=BeautifulSoup(result.text,'html.parser')

HTMLの中からメソッドを使用して要素を探します。

メソッド 機能
find() 引数で指定したHTMLタグを検索して最初に一致したものを返します。
find_all() 引数で指定したHTMLタグを検索して一致したもの全てを格納したリストを返します。
select() 引数をCSS Selectorとして検索を行い一致したもの全てを格納したリストを返します。
select_one() 引数をCSS Selectorとして検索を行い最初に一致したものを返します。

例として、「find_all()」メソッドを使用して、Webサイトから画像リンク(imgタグ)を抜き出す場合には下記となります。

>>> data1.find_all('img')

テキスト検索を行う場合は、基本的にBeautifulSoupでは完全一致で検索が行われます。この方法では正規表現やワイルドカード等は使用できません。

>>> data1.find_all(text='検索したいテキスト')

「BeautifulSoup」では「find_all()」等のメソッドを利用し、「id属性」(「id=」+’id名’)や「class属性」(「class_=」+’クラス名’)を指定することで、範囲を絞り込んで検索することが可能です。divタグで「classがpresentation」に該当する部分をHTMLから抜き出そうとすると下記になります。

>>> data1.find_all('div',class_='presentation')

検索結果を変数(data2)に代入します。

>>> data2=data1.find_all('div',class_='presentation')

検索結果のオブジェクトに「.タグ名」で1階層下の要素に絞り込むことができます。例えばタイトルに使用されるh3タグの検索は下記になります。

>>> data2.h3

HTMLのタグ以外のテキスト部分だけを結果表示したい場合には「get_text()」を使用します。

>>> data2.h3.get_text()

ここまでをPython実行形式ファイル(.py)にすると下記の通りで、PythonによるWebスクレイピングの基本プログラムになります。

import requests
from bs4 import BeautifulSoup

result=requests.get('URL')
data1=BeautifulSoup(result.text,'html.parser')
data2=data1.find_all('div',class_='presentation')

for data3 in data2:
    print(data3.h3.get_text())

よくある質問

Q. Webスクレイピングは法的に問題ありませんか?
A. Webサイトの利用規約(ToS)を必ず確認してください。多くのサービスは自動クローリングやスクレイピングを利用規約で禁止しています。また著作権法・不正競争防止法・電子計算機損壊等業務妨害罪に抵触するリスクもあります。個人学習目的であっても、対象サイトのrobots.txtを確認し、過度なリクエストを送らないよう注意が必要です。公式APIが提供されている場合はAPIを使用する方が安全・確実です。
Q. requestsとBeautifulSoupの役割の違いは何ですか?
A. requestsはHTTPリクエストを送ってWebページのHTMLを文字列として取得するライブラリです。取得しただけではHTMLタグが混在した状態で、目的のデータを取り出すのは困難です。BeautifulSoupはその取得したHTML文字列を解析し、タグ・クラス・IDで要素を検索・抽出するためのライブラリです。つまりrequestsで「データを取得し」BeautifulSoupで「必要な部分を抽出する」という2段階の役割分担になっています。
Q. JavaScriptで動的に生成されるページはスクレイピングできますか?
A. requestsとBeautifulSoupの組み合わせでは、HTMLの静的な部分しか取得できません。SPAやAjaxで動的に表示されるコンテンツを取得したい場合は、ブラウザを自動操作できる「Selenium」や「Playwright」を使用します。SeleniumはブラウザをPythonから操作してJavaScript実行後のDOMを取得できるため、動的ページにも対応できます。
Q. find() と find_all() はどう使い分けますか?
A. find()は条件に一致する最初の1要素だけを返します。「ページ内に1つしかない要素(タイトルや特定のIDを持つ要素)を取得したい」場合に使います。find_all()は条件に一致するすべての要素をリストで返します。「記事一覧のすべての見出しを取得したい」「リスト内のすべてのリンクを取得したい」場合に使います。返り値の型が異なる(find()は単一のTagオブジェクト、find_all()はリスト)ため、その後の処理に注意してください。

まとめ

  • Webスクレイピングとは、Webサイトから必要な情報を絞り込み収集する技術。Pythonはrequests・BeautifulSoupという強力なライブラリを持ち、スクレイピングに最も広く使われる言語の一つ
  • 基本の流れは「requestsでHTTP通信→HTMLを取得」「BeautifulSoupでHTML解析→必要な要素を抽出」「データを整形して出力・保存」の3ステップ
  • BeautifulSoupのメソッドはfind()(最初の1件)、find_all()(全件リスト)、select()(CSS Selector全件)、select_one()(CSS Selector最初の1件)の4つが基本。class属性・id属性による絞り込みと組み合わせることで柔軟なデータ抽出が可能
  • JavaScript動的生成ページはrequests+BeautifulSoupでは対応不可。SeleniumやPlaywrightを使う必要がある
  • スクレイピングを実行する際は必ず対象サイトの利用規約・robots.txtを確認し、過負荷をかけないよう配慮すること

▼ アクロビジョンについて

👔

一緒に働きましょう

一人ひとりのキャリアに向き合い、
活躍できる現場をご紹介します。

採用サイトを見る →
💻

システム開発のご依頼・ご相談

コンサルティングから運用保守まで、
ワンストップで対応します。

まずはお気軽にご相談ください →