「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Beautiful Soup を使用してパブリック Web からデータを抽出する方法

Beautiful Soup を使用してパブリック Web からデータを抽出する方法

2024 年 8 月 1 日に公開
ブラウズ:755

How Beautiful Soup is used to extract data out of the Public Web

Beautiful Soup は、Web ページからデータを収集するために使用される Python ライブラリです。 HTML および XML ドキュメントを解析するための解析ツリーを作成し、必要な情報を簡単に抽出できるようにします。

Beautiful Soup は、Web スクレイピングのためのいくつかの重要な機能を提供します:

  1. 解析ツリーの移動: 解析ツリーを簡単に移動して、要素、タグ、属性を検索できます。
  2. 解析ツリーの変更: タグや属性の追加、削除、更新など、解析ツリーを変更できます。
  3. 出力形式: 解析ツリーを文字列に変換して戻すことができるため、変更したコンテンツを簡単に保存できます。

Beautiful Soupを使用するには、lxmlやhtml.parserなどのパーサーとともにライブラリをインストールする必要があります。 pip
を使用してインストールできます。

#Install Beautiful Soup using pip.
pip install beautifulsoup4 lxml

ページネーションの処理

複数のページにまたがってコンテンツを表示する Web サイトを扱う場合、すべてのデータを収集するにはページネーションの処理が不可欠です。

  1. ページネーションの構造を特定する: Web サイトを検査して、ページネーションの構造 (次のページ ボタンや番号付きリンクなど) を理解します。
  2. ページの反復: ループを使用して各ページを反復し、データをスクレイピングします。
  3. URL またはパラメータを更新します: URL またはパラメータを変更して、次のページのコンテンツを取得します。
import requests
from bs4 import BeautifulSoup

base_url = 'https://example-blog.com/page/'
page_number = 1
all_titles = []

while True:
    # Construct the URL for the current page
    url = f'{base_url}{page_number}'
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    # Find all article titles on the current page
    titles = soup.find_all('h2', class_='article-title')
    if not titles:
        break  # Exit the loop if no titles are found (end of pagination)

    # Extract and store the titles
    for title in titles:
        all_titles.append(title.get_text())

    # Move to the next page
    page_number  = 1

# Print all collected titles
for title in all_titles:
    print(title)

ネストされたデータの抽出

抽出する必要があるデータが複数のタグ層内にネストされている場合があります。ネストされたデータ抽出を処理する方法は次のとおりです。

  1. 親タグに移動: ネストされたデータを含む親タグを見つけます。
  2. ネストされたタグの抽出: 各親タグ内で、ネストされたタグを検索して抽出します。
  3. ネストされたタグを反復処理する: ネストされたタグを反復処理して、必要な情報を抽出します。
import requests
from bs4 import BeautifulSoup

url = 'https://example-blog.com/post/123'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

# Find the comments section
comments_section = soup.find('div', class_='comments')

# Extract individual comments
comments = comments_section.find_all('div', class_='comment')

for comment in comments:
    # Extract author and content from each comment
    author = comment.find('span', class_='author').get_text()
    content = comment.find('p', class_='content').get_text()
    print(f'Author: {author}\nContent: {content}\n')

AJAXリクエストの処理

最近の Web サイトの多くは AJAX を使用してデータを動的に読み込みます。 AJAX を処理するには、ブラウザ開発者ツールを使用してネットワーク リクエストを監視し、スクレイパーでそれらのリクエストを複製するなど、さまざまなテクニックが必要です。

import requests
from bs4 import BeautifulSoup

# URL to the API endpoint providing the AJAX data
ajax_url = 'https://example.com/api/data?page=1'
response = requests.get(ajax_url)
data = response.json()

# Extract and print data from the JSON response
for item in data['results']:
    print(item['field1'], item['field2'])

Webスクレイピングのリスク

Web スクレイピングでは、法的、技術的、倫理的なリスクを慎重に検討する必要があります。適切な安全対策を実装することで、これらのリスクを軽減し、責任を持って効果的に Web スクレイピングを実行できます。

  • 利用規約違反: 多くの Web サイトでは、利用規約 (ToS) でスクレイピングを明示的に禁止しています。これらの規約に違反すると、法的措置が講じられる可能性があります。
  • 知的財産の問題: 許可なくコンテンツをスクレイピングすると、知的財産権が侵害され、法的紛争につながる可能性があります。
  • IP ブロック: ウェブサイトは、スクレイピング動作を示す IP アドレスを検出してブロックする場合があります。
  • アカウントの禁止: ユーザー認証が必要な Web サイトでスクレイピングが実行された場合、スクレイピングに使用されたアカウントが禁止される可能性があります。

Beautiful Soup は、HTML および XML ドキュメントをナビゲートおよび検索するための使いやすいインターフェイスを提供することで、Web スクレイピングのプロセスを簡素化する強力なライブラリです。さまざまな解析タスクを処理できるため、Web からデータを抽出したい人にとって不可欠なツールになります。

リリースステートメント この記事は、https://dev.to/marcosconci/how-beautiful-side-extract-out-of the-public-51ggに再現されています
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3