BeautifulSoupでウェブデータを自由自在に!基本から応用まで完全解説

スクレイピング

PythonのBeautifulSoupを使えば、HTML内の特定のdivタグやclass属性、そしてp要素から必要なデータを簡単に抽出できます。本記事では、これらの要素を活用したスクレイピングの基本から応用までを解説します。


BeautifulSoupの基本

divclass属性、pタグはHTML内でよく使われる要素です。BeautifulSoupを使えば、これらを効率よく検索し、必要なデータを取得できます。

インストールはpip

必要なライブラリも一緒にインストールしちゃいます。

pip install beautifulsoup4 requests lxml

サンプルHTMLの例

以下のサンプルHTMLを使って説明します。

<html>
  <body>
    <div class="product">
      <h2>商品名1</h2>
      <p class="description">これは商品1の説明です。</p>
      <p class="price">1000円</p>
    </div>
    <div class="product">
      <h2>商品名2</h2>
      <p class="description">これは商品2の説明です。</p>
      <p class="price">2000円</p>
    </div>
    <div class="product">
      <h2>商品名3</h2>
      <p class="description">これは商品3の説明です。</p>
      <p class="price">3000円</p>
    </div>
  </body>
</html>

divタグやclass属性からデータを取得

基本操作

まずは、divタグやclass属性を指定してデータを取得します。

from bs4 import BeautifulSoup

html = """
<html>
  <body>
    <div class="product">
      <h2>商品名1</h2>
      <p class="description">これは商品1の説明です。</p>
      <p class="price">1000円</p>
    </div>
    <div class="product">
      <h2>商品名2</h2>
      <p class="description">これは商品2の説明です。</p>
      <p class="price">2000円</p>
    </div>
    <div class="product">
      <h2>商品名3</h2>
      <p class="description">これは商品3の説明です。</p>
      <p class="price">3000円</p>
    </div>
  </body>
</html>
"""

soup = BeautifulSoup(html, 'html.parser')

# class属性で検索
products = soup.find_all("div", class_="product")
for product in products:
    print(product)

p要素からデータを抽出

pタグのテキストデータを取得する方法を紹介します。

すべてのpタグを取得

以下のコードで、すべてのpタグを検索し、テキストを取得します。

# すべての<p>タグを取得
all_paragraphs = soup.find_all("p")
for p in all_paragraphs:
    print(p.text)

特定のpタグを取得

class属性を指定して、特定のpタグ(例: 商品の説明や価格)を取得します。

# 商品説明と価格を取得
for product in products:
    description = product.find("p", class_="description").text
    price = product.find("p", class_="price").text
    print(f"説明: {description}, 価格: {price}")

実際のウェブページからデータを収集

requestsを使って、ウェブページからデータを取得する例です。

サンプルコード

import requests
from bs4 import BeautifulSoup

url = "https://example.com/products"
headers = {"User-Agent": "Mozilla/5.0"}

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

# 商品名、説明、価格を取得
products = soup.find_all("div", class_="product")
for product in products:
    name = product.find("h2").text
    description = product.find("p", class_="description").text
    price = product.find("p", class_="price").text
    print(f"商品名: {name}, 説明: {description}, 価格: {price}")

応用テクニック

正規表現を使った検索

class属性やタグ名が部分一致する場合、正規表現を使います。

import re

# class属性に「description」を含む<p>タグを検索
descriptions = soup.find_all("p", class_=re.compile("description"))
for desc in descriptions:
    print(desc.text)

注意点

  • サイトの利用規約を確認
    スクレイピングを行う前に、対象サイトの利用規約を必ず確認してください。
  • サーバーへの配慮
    リクエスト間隔を空けるなど、サーバー負荷を軽減する工夫を忘れずに。

まとめ

BeautifulSoupを使えば、divclassp要素から簡単にデータを抽出できます。特定の属性やタグを組み合わせて検索することで、効率的に必要な情報を取得できるようになります。ぜひこの記事を参考に、実際のウェブスクレイピングプロジェクトに役立ててください!

このサイトを稼働しているVPSはこちら

コメント

タイトルとURLをコピーしました