HTML/XML を解析しデータを抽出するオープンソース Python ライブラリ
Beautiful Soup は、乱雑な HTML/XML を解析し、テキストやリンクを抽出し、ツリーをナビゲートし、最新のウェブスクレイピングワークフローを支える、トップクラスのオープンソース Python パーシングライブラリです。
Beautiful Soup とは何ですか?
ウェブスクレイピングは、ウェブサイトから貴重な情報を抽出する必要があるデータサイエンティスト、開発者、研究者にとって不可欠なスキルとなっています。Beautiful Soupは、HTMLおよびXMLドキュメントを解析するための、最も人気があり使いやすいPythonライブラリの一つです。2004年に誕生して以来、この強力なツールはプログラマーのウェブスクレイピングプロジェクトでの作業時間を大幅に削減してきました。ライブラリの直感的なAPI、優れたドキュメント、活発なコミュニティサポートにより、初心者から経験豊富な開発者まで、効率的にウェブデータを抽出できます。
Beautiful Soup は、HTML および XML ファイルからデータを抽出するために特別に設計された Python ライブラリです。2004 年以来、ウェブスクレイピングプロジェクトでプログラマーの作業時間を数時間から数日分節約してきた強力な Python ライブラリです。数行のコードだけで、シンプルさと使いやすさ、すべてのリンクの取得、テキストコンテンツの抽出、自動エンコーディング変換、パーサの柔軟性、堅牢なエラーハンドリング、ウェブページからのリンク検索と抽出など、複雑なクエリを実行できます。
Beautiful Soup ライブラリは、HTML および XML ドキュメントからデータを抽出するというしばしば苛立たしい作業を、シンプルな Pythonic なプロセスに変換し、構造が不十分なウェブコンテンツを整然としたパースツリーに変換します。このツリーはシンプルなメソッドでナビゲートや検索が可能です。従来は手作業で何時間もかかっていた作業も、Beautiful Soup を使えば数分で完了します。Python 開発者がウェブスクレイピングの世界に入る際の業界標準として位置付けられています。そのシンプルさと、さまざまなパーサの力を組み合わせたことにより、静的ウェブサイトからデータを抽出する際の無敵の選択肢となっています。
Beautiful Soup の入門
Beautiful Soup をインストールする推奨かつ最も簡単な方法は pip を使用することです。スムーズなインストールのために、以下のコマンドをご利用ください。
pipでBeautiful Soupライブラリをインストールする
pip install beautifulsoup4 手動でインストールすることもできます。最新のリリースファイルを直接 Beautiful Soup のウェブページからダウンロードしてください。
複数のパーサーを使用する
Beautiful Soup ライブラリはすべてのパーシングを自前で行うわけではなく、代わりに Python の組み込み html.parser、速い lxml パーサー、ブラウザのような html5lib といった成熟したパーサーの上に位置しています。ニーズに応じて、速度または標準準拠を優先できます。このアーキテクチャにより、ニーズに最適なパーサーを選択したり、速度と柔軟性をトレードオフしたり、Beautiful Soup のコードを変更せずにさまざまなパーシング戦略を試したりする柔軟性が得られます。以下のシンプルなコードは、開発者が Beautiful Soup と共に異なるパーサーを使用する方法を示しています。
Pythonアプリ内でHTMLドキュメントを解析するために複数のパーサーを使用する方法は?
# Using different parsers with Beautiful Soup
html_doc = "サンプルコンテンツ
"
# Using lxml parser (fast)
soup_lxml = BeautifulSoup(html_doc, 'lxml')
# Using html5lib parser (slower but more lenient)
soup_html5lib = BeautifulSoup(html_doc, 'html5lib')
# Using Python's built-in parser
soup_builtin = BeautifulSoup(html_doc, 'html.parser')
ウェブページからリンクを抽出する
リンクのスクレイピングは一般的なウェブスクレイピングタスクであり、特にウェブクローラーの構築に役立ちます。オープンソースの Beautiful Soup ライブラリは、Python アプリケーション内でウェブページを読み込み、リンクを抽出するサポートを含んでいます。以下のシンプルなコード例は、requests ライブラリを使用してライブウェブページを取得し、Python アプリケーション内で全てのアンカータグを抽出する方法を示しています。
Pythonを使用してウェブページからリンクを抽出する方法は?
from bs4 import BeautifulSoup
import requests
# Fetch a real webpage
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# Extract all links
links = soup.find_all('a')
print(f"Found {len(links)} links:")
for link in links:
href = link.get('href')
text = link.get_text().strip()
print(f"Text: {text} | URL: {href}")
# Filter links by criteria
external_links = []
for link in soup.find_all('a'):
href = link.get('href')
if href and href.startswith('http'):
external_links.append(href)
print(f"\nFound {len(external_links)} external links")
特定の HTML 要素を検索する
Beautiful Soup の最大の強みの一つは、HTML を自然に検索できる点で、まるでプレーンな英語を読むかのようです。複雑な DOM API を扱う代わりに、欲しいものを記述すれば、Beautiful Soup がそれを見つけてくれます。ページ上のすべてのリンクを見つけたいとしましょう。以下のコード例に示すように find_all メソッドを使用できます。このメソッドはすべてのリンクタグのリストを返します。その後、URL とテキストを抽出して、Python API を使って可視的なリンク名を取得します。
Python APIを介してウェブページから特定のHTML要素を検索・抽出する方法は?
# Extract all anchor tags
links = soup.find_all('a')
for link in links:
href = link.get('href')
text = link.text.strip()
print(f"Text: {text} | URL: {href}")
自動エンコーディング処理
Beautiful Soup の最も便利な機能の一つは自動エンコーディング変換です。ライブラリは受信したドキュメントを自動的に Unicode に変換し、出力ドキュメントを UTF-8 に変換するため、ウェブスクレイピングで最も一般的な頭痛の種の一つを取り除きます。ドキュメントがエンコーディングを指定していない場合にのみ、エンコーディングを考慮する必要があります。Beautiful Soup はエンコーディングを自動検出できないため、これらの稀なケースでは元のエンコーディングを手動で指定してください。