【Python】RequestsとBeautifulSoupを使ったWebスクレイピング方法

PythonWebスクレイピングをする方法はいくつかありますが、一般的にはRequestsモジュールBeautifulSoupモジュールを使うことが多いです。
RequestsモジュールWebサイトの情報を取得するためのモジュールで、BeautifulSoupモジュールHTMLからデータを取り出すためのモジュールです。

今回は、実際に使えるPythonのサンプルコードで、具体的なWebスクレイピングの手順を説明します。

Webスクレイピングとは

Webスクレイピングとは、Webサイトから情報を抽出するコンピュータソフトウェア技術のことです。
Webスクレイピングでは、HTMLフォーマットからデータベースやスプレッドシートに格納・分析可能な構造化データへの変換に、より焦点が当てられています。

Webスクレイピングの流れ
  • Webサイト(非構造化データ)
  • Webスクレイパー(情報抽出)
  • データベース(構造化データ)

Webスクレイピングの目的と注意点

Webスクレイピング目的は、Webから必要なデータを正しく収集することです。
Webスクレイピングによって、以下のようなことができます。

  • マーケティングデータの収集・活用
  • Webサービスやアプリケーションの開発
  • 新たな情報の生成

Webスクレイピングにはメリットだけでなく、デメリット注意点もあります。
例えば、以下のようなものがあります。

  • Webサイトの利用規約や著作権に違反する可能性がある
  • Webサイトの仕様変更やアクセス制限に対応する必要がある
  • スクレイピングしたデータの品質や信頼性を確保する必要がある

Webスクレイピングを行う際には、これらの点に注意してください。

Webスクレイピングの使用例

一般的には、ショッピングサイトやニュース、SNSの記事などの情報収集にWebスクレイピングを使いことが多いです。

例えば、商品価格の比較、株価の監視、口コミの分析といったような用途で、ニュースサイトやブログ、ECサイトなどからデータを抽出したり、情報収集や教育目的で、特定のキーワードやカテゴリに関連するニュース記事のリンクを取得する。また、ニュースやSNS記事からテキストや画像を取得し、CSVファイルやデータベースに保存することもあります。

これらの例はどれもPythonを使って実現できます。
Pythonには、RequestsBeautifulSoupの他にもWebスクレイピングを簡単に行えるライブラリが多数あります。

RequestsとBeautifulSoupモジュールについて

PythonWebスクレイピングを作成する手順を紹介する前に、RequestsBeautifulSoupモジュールについて少しだけ説明しておきます。

Requests

Requestsは、PythonでWebサービスとやりとりするためのモジュールです。
WebサイトからHTMLJSONなどのデータを取得したり、HTTPメソッド(GETやPOSTなど)を使ってリクエストを送信したりすることができます。
Requestsを使うと、Webサイトの情報取得や画像の収集などを簡単に行えます。

BeautifulSoup

BeautifulSoupは、HTMLXMLファイルからデータを取得し、解析するためのPythonWebスクレイピング用のモジュールです。
スクレイピングしたWebページから特定の要素や属性を抽出したり、DOMツリーを操作したりすることができます。
BeautifulSoupHTMLXMLのパーサーをラップして扱いやすくするライブラリで、selectfindなどのメソッドを使ってタグや属性にアクセスできます。

つまり、RequestsBeautifulSoupを組み合わせると、Webスクレイピングを簡単に行うことができます。
まず、RequestsWebページの内容を取得し、次にBeautifulSoupHTMLを解析して必要な情報を抜き出すという流れです。

PythonでWebスクレイピングする方法

それぞれの具体的な手順について、コマンドやコードを使って説明します。

STEP
requestsとBeautifulSoupモジュールをインポート
import requests
from bs4 import BeautifulSoup
STEP
requests.get()関数でレスポンスオブジェクトを作成
url = "https://www.example.com/" # スクレイピングしたいWebサイトのURL
response = requests.get(url) # レスポンスオブジェクトを作成
STEP
レスポンスオブジェクトのtext属性からHTMLを取得
html = response.text # HTMLを取得
STEP
BeautifulSoupオブジェクトを作成
soup = BeautifulSoup(html, "html.parser") # BeautifulSoupオブジェクトを作成
STEP
find()やfind_all()メソッドで目的の要素や属性を抽出
links = soup.find_all("a") # すべてのaタグ(リンク)を抽出
for link in links: # リンクごとにループ
    href = link.get("href") # href属性(リンク先)を取得
    print(href) # href属性を表示

以上がPythonWebスクレイピングをする方法の具体的な手順です。

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

最後に、PythonRequestsBeautifulSoupモジュールを使ってWebスクレイピングをする例を、サンプルコードを書いてもっと詳しく使い方を説明します。
Yahoo!ニュースのトップページから、見出しとリンクを抽出して表示します。

# requestsモジュールとBeautifulSoupモジュールをインポートする
import requests
from bs4 import BeautifulSoup

# WebサイトのURLを指定してレスポンスオブジェクトを作成する
url = "https://news.yahoo.co.jp/" # スクレイピングしたいWebサイトのURL
response = requests.get(url) # レスポンスオブジェクトを作成

# レスポンスオブジェクトのtext属性からHTML文書を取得する
html = response.text # HTML文書を取得

# BeautifulSoup()関数でHTML文書を解析してBeautifulSoupオブジェクトを作成する
soup = BeautifulSoup(html, "html.parser") # BeautifulSoupオブジェクトを作成

# BeautifulSoupオブジェクトのfind_all()メソッドで目的の要素や属性を抽出する
headlines = soup.find_all("a", class_="sc-esjQYD") # すべてのaタグ(リンク)でclass属性が"sc-esjQYD"のもの(見出し)を抽出

# 抽出した要素や属性ごとにループして表示する
for headline in headlines: # 見出しごとにループ
    text = headline.text # テキスト部分(見出し内容)を取得
    href = headline.get("href") # href属性(リンク先)を取得
    print(text) # テキスト部分(見出し内容)を表示
    print(href) # href属性(リンク先)を表示

以上です。お疲れ様でした。
ちなみに、このコードはPython 3.9.7で動作確認済みです。

著:山田 祥寛
¥2,970 (2023/03/09 13:45時点 | Amazon調べ)


Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA