を作る ウェブスクレイピング Pythonで BeautifulSoup, 必要なライブラリは2つあります: requests ウェブページをダウンロードするには、そして beautifulsoup4 HTMLコードからデータを抽出するために。.
次のコマンドでそれらをインストールしてください pip install requests beautifulsoup4, 、その後、以下のガイドに従って、サイトを段階的にスクレイピングしてください。.

PythonでBeautifulSoupを使ってスクレイピングするための前提条件
始めるにあたって、専門家である必要はありません。スクリプトを読んで実行できれば十分です。 Python 始めるには十分すぎるほどです。.
開始するには、以下のものをインストールする必要があります:
- インストール Python および開発環境。
- インストール pip, 、1つのコマンドでPythonライブラリを追加できるツールです。.
- インストール BeautifulSoup :
pip install beautifulsoup4
パッケージ名にご注意ください: PyPI, 、そうですね beautifulsoup4 記述する必要があります。コードにインポートするモジュールの名前は bs4.
- インストール Requests ウェブページをダウンロードするには:
pip install リクエスト
- インストール lxml (オプション)、BeautifulSoupがHTMLの解析に使用する、より高速なパーサー:
pip install lxml
PythonとBeautifulSoupでウェブスクレイピングをするには?
以下は、~を回収するための完全なプロジェクトです。 タイトル ウェブページとすべての リンク そこに含まれているもの。.

ステップ 1: リクエストでページの内容を取得する
ウェブページをダウンロードするには、次のリクエストを送信します。 HTTP GETリクエスト URL へ。これがライブラリの役割です。 Requests.
リクエストがあるたびに、サーバーは ステータスコード すべてがうまくいったかどうかを示すものです。知っておくべき主なものは以下の通りです:
- 200 成功した。
- 301 / 302 リダイレクション。
- 404 ページが見つかりません。
- 500 内部サーバーエラー。
と Requests, この結果は属性を使って確認します .status_code. 具体的な例を挙げましょう。このコードは、あるサイトへリクエストを送信し、ステータスコードを確認した後、問題がなければHTMLコンテンツの一部を表示します。.
輸入リクエスト
# 対象URL
url = "https://bonjour.com"
# GETリクエストを送る
レスポンス = requests.get(url)
# ステータスコードをチェックする
if response.status_code == 200:
print("成功: ページが取得されました!")
html = response.text # ページのHTMLコンテンツ
print("HTMLコンテンツの抜粋:")
print(html[:500]) #は最初の500文字だけを表示する
else:
print(f "エラー: ステータスコード {response.status_code}")
ステップ2:BeautifulSoupでHTMLコードを分析する
次のようにしてページのコンテンツを取得するときは レスポンステキスト, すると単純な文字列が得られます:すべての HTMLコード ページ上にはあるが、現状では利用できない。これを簡単に操作するには、オブジェクトを作成する BeautifulSoup, 、この生のHTMLを、閲覧・解析可能な構造に変換するものです。.
常に次のことを示す パーサー, 、例えば 「html.parser. すると、BeautifulSoupは警告を表示することなく、HTMLを正しく解析します。また、次のようにすることもできます。 lxml, 、より高速で、別途インストールする必要があります。.
from bs4 import BeautifulSoup
インポートリクエスト
url = "https://bonjour.com"
レスポンス = requests.get(url)
html = response.text
# パーサを指定することを推奨する
soup = BeautifulSoup(html, "html.parser")
ステップ3:要素の検索と抽出
HTMLは現在、BeautifulSoupのオブジェクトとなっています。以下の要素を検索して取得することができます。 データ 興味のあるタグを、タグごとに指定してください。3つの方法で、ほとんどのニーズに対応できます。.
find() と find_all() の使用
find() を返す 最初の要素 見つかった。. find_all() を返す 全リスト 対応する要素。.
# タイトルを検索 <h1>
h1 = soup.find("h1")
print(h1.get_text())
# すべてのリンクを取得する <a>
liens = soup.find_all("a")
for lien in liens:
print(lien.get_text(), lien.get("href"))
属性による要素のターゲティング
HTML属性に基づいて検索を絞り込むことができます。例えば、 クラス, ID あるいは、それ以外のどれでも。. 注意します : Pythonでは、次のように記述します クラス そしていいえ クラス, 、言語の予約語との衝突を避けるため。.
# 特定のIDを持つdivを取得する
container = soup.find("div",)
# 特定のクラスを持つすべてのリンクを取得する
nav_links = soup.find_all("a", class_="nav-link")
select() での CSS セレクタの使用
より詳細な検索を行うには、以下の方法があります。 セレクト 受け付ける CSSセレクタ. ページ全体のHTMLを手作業で調べる必要はなく、特定の部分を正確に指定できます。.
# 記事タイトルの全リンク
article_links = soup.select("article h2 a")
# 全て <a> href属性が "http "で始まるもの。
links_http = soup.select('a[href^="http"]')
BeautifulSoupを使用してHTMLテーブルからデータを抽出する方法

実際のユースケースは、単にタイトルやリンクを取得するだけよりも、多くの場合、より複雑です。あなたは、その’構造化データ抽出 表やリストと同様に、 ページ番号, 、およびスクレイピングでよくある間違い。.
表とリストの抽出
ウェブサイトは多くの場合、データを HTMLテーブル (<table>, <tr>, <th>, <td>または リスト (/ と ). これらの構造を実用的なデータに変換するには、行ごと、あるいは要素ごとに処理していく必要があります。.
あるものを抽出するには HTMLテーブル原理は単純だ:
- ヘッダーを取得する (
<th>)で列見出しを識別する。 - 各行を順に確認する (
<tr>)とセルの検索(<td>) データが含まれているもの。. - 情報をリストまたは辞書に格納する。.
の場合 HTMLリスト ( どこ ) :
- すべてのタグを特定する
と find_all.- 。
- それらのコンテンツ(テキストまたはリンク)を取得し、Pythonのリストに追加する。.
これはテーブルを使った例である:
html = """
<table>
<tr>
<th>苗字</th>
<th>年齢</th>
<th>街</th>
</tr>
<tr>
<td>アリス</td>
<td>25</td>
<td>パリ</td>
</tr>
<tr>
<td>ボブ</td>
<td>30</td>
<td>リヨン</td>
</tr>
</table>
"""
# BeautifulSoupオブジェクトの作成
soup = BeautifulSoup(html, "html.parser")
# 配列からヘッダーを取り出す
headers = [th.get_text(strip=True) for th in soup.find_all("th")] ヘッダーを配列から取り出す。
print("Headers:", headers)
# データの行を取り出す(1行目はヘッダーなのでスキップする)
行 = [].
for tr in soup.find_all("tr")[1:]:
cells = [td.get_text(strip=True) for td in tr.find_all("td")].
if cells:
rows.append(cells)
print("Lines :", rows)
ここだよ、 find_all("th") を取得する ヘッダー と find_all("td") 各行のセルを取得します。以下の行をループ処理します。 <tr> を使用して、テーブルを行ごとに再構築する。
以下はリストに基づいた例である:
from bs4 import BeautifulSoup
html_list = ""
- アップル</li
- バナナ</li
- オレンジ</li
</ul
"""
soup = BeautifulSoup(html_list, "html.parser")
# リストからアイテムを取り出す
items = [li.get_text(strip=True) for li in soup.find_all("li")]。
print("Extracted list:", items) # ["Apple", "Banana", "Orange"].
それぞれ は直接、 Pythonのリスト要素, 、これにより次の結果が得られる [アップル」、「バナナ」、「オレンジ」]。.
ページネーションとリンクの管理
多くの場合、データは1ページに収まりきらない。それらはリンクを介して 「次のページ」 または 番号付きページネーション (?page=1, ?page=2, 、など)。どちらの場合も、あなたは カール すべてのページを取得し、データを統合するため。.
「page」パラメータを用いた例:
インポートタイム
インポート リクエスト
from bs4 import BeautifulSoup
# ページネーション付きURLの例
base_url = "https://bonjour.com/articles?page={}"
HEADERS = {"User-Agent": "Mozilla/5.0"}.
all_articles = [] (すべての記事)
# 閲覧するページが5つあると仮定する
for page in range(1, 6):
url = BASE_URL.format(page)
r = requests.get(url, headers=HEADERS, timeout=20)
if r.status_code == 200:
soup = BeautifulSoup(r.text, "html.parser")
# 記事タイトルを抽出する
articles = [h2.get_text(strip=True) for h2 in soup.find_all("h2", class_="title")].
all_articles.extend(articles)
else:
print(f "ページ{page}でエラー(コード:{r.status_code})")
time.sleep(1.0) # 丁寧さ
print("Articles retrieved:", all_articles)
手順ごとの簡単な説明:
- ~を準備する’URL 駐車場付き
{}ページ番号を挿入するには。.
BASE_URL = "https://bonjour.com/articles?page={}
- 一部のサイトでは、ブラウザの識別情報がないリクエストをブロックします。 User-Agent ボットと間違われないようにしましょう。.
headers = {"User-Agent": "Mozilla/5.0"}.
requests.get(url, headers=headers)
- ページのループ 1~5.
for page in range(1, 6):
- 次のコードでページのHTMLを取得します requests.
requests.get(url)
- サイトが応答しない場合の待機時間を制限する(20秒のタイムアウト).
requests.get(url, timeout=20)
- このページを以下のツールで分析する BeautifulSoup.
BeautifulSoup(response.text、"html.parser")
- すべての 記事の見出し.
find_all("h2", class_="title")
- 見つかった記事を総合リストに追加します。.
all_articles.extend(articles)
- 「」を入力してください 休憩 各リクエストの間に間隔を空けて、サーバーに過度な負荷をかけず、アクセス禁止にならないようにしてください。.
time.sleep(1.0)
ループの後 すべての記事 を含む 全5ページのタイトル.
よくある過ちと課題
スクレイピングは、単にボタンを押すだけのものではありません。以下のような障害に頻繁に直面することになります:
- HTTPエラー : 404 (ページが見つかりません)、, 403 (立ち入り禁止)および 500 (サーバー側のエラー)。.
管理の例:
response = requests.get(url)
if response.status_code == 200:
print("ページを正常に取得しました")
elif response.status_code == 404:
print("エラー:ページが見つかりません")
else:
print("返されたステータスコード:", response.status_code)
- スクレイピングをブロックするサイト : 自動リクエストを検知してアクセスをブロックするものもあります。.
- 動的ページ(JavaScript) : BeautifulSoup ~のみを読み取る 静的HTML. ページがJavaScriptを使ってコンテンツを読み込む場合、何も表示されません。その場合は、次のようなツールを使用する必要があります。 Selenium どこ Playwright.
ブロックされたりサイトを破損させたりすることなく、効率的にスクレイピングを行うためのベストプラクティスは以下の通りです:
- 以下の事項を遵守してください robots.txtファイル 分析したいサイトの。.
- 以下のものを導入する 締め切り クエリ間で
time.sleep()サーバーに過度な負荷がかからないようにするため。. - 以下のものを使用する 代理人 そして、それらを回して。.
- 定期的に変更して User-Agent.
SeleniumとBeautifulSoupでウェブをスクラップするには?

Selenium 実際のブラウザを操作する, JavaScriptを実行し、まるで人間が閲覧しているかのようにページを表示します。. BeautifulSoup その後、ページが完全にレンダリングされたらHTMLを解析し、必要なデータをすべて抽出します。.
ステップ1:SeleniumとBeautifulSoupをインストールする
ここでは、~の代わりに requests, 、あなたは Selenium ページの内容を取得するためです。次のコマンドで2つのライブラリをインストールしてください:
pip install selenium beautifulsoup4
次に、次のものをダウンロードする必要があります。 WebDriver お使いのブラウザのバージョンに合わせて調整されています。Google Chromeの場合は、 ChromeDriver. 選択肢は2つあります:Pythonスクリプトと同じフォルダに配置するか、あるいは’環境変数PATHに追加する お使いのシステム。.
ステップ 2: Seleniumの設定
まずはインポートから始めましょう webdriver Seleniumを使用してブラウザを操作する。.
from selenium import webdriver
from selenium.webdriver.common.by import By
次に、ブラウザを起動します。ブラウザがページを開き、 JavaScriptを実行する, 、ここではChrome。.
driver = webdriver.Chrome()
ブラウザにどの URL 訪れる。.
driver.get("https://www.exemple.com")
ページ上の特定の要素の表示に時間がかかる場合は、Seleniumに最大 10秒.
driver.implicitly_wait(10)
ステップ3:ページ・コンテンツの取得
ページが読み込まれたら、 フルDOM : JavaScriptの実行後に生成されたHTMLソースコード。.
html_content = driver.page_source
ステップ4:BeautifulSoupによるHTML解析
このソースコードを今すぐ ビューティフル・スープ これを利用するには:
from bs4 import BeautifulSoup
# BeautifulSoupオブジェクトの作成
soup = BeautifulSoup(html_content, 'html.parser')
# 例:ページ内のすべての見出しを取得する
titres = soup.find_all('h2')
for titre in titres:
print(titre.get_text())
BeautifulSoupには、次のような強力なメソッドが用意されています。 find(), find_all() および、以下の要素に対するCSSセレクタ 特定して抽出する HTMLの具体的な要素。.
ステップ5:ブラウザを閉じる
非常に重要:実行後は必ずブラウザを閉じてください。 リソースを解放する.
ドライバー終了()
こうして、あなたは Selenium 為に ヒューマン・ナビゲーションをシミュレート (クリック、スクロール)と、HTML解析におけるBeautifulSoupの効率性を兼ね備えています。これは、JavaScriptでデータを読み込むサイトをスクレイピングするのに最適な方法です。.
よくある質問
Pythonでウェブスクレイピングをするのに最適なツールは?
~はありません’削り器 汎用的なものではなく、あなたのプロジェクトに合わせたソリューションです。以下に、最もよく使われている3つを紹介します:
- BeautifulSoup : HTMLを解析してコンテンツを素早く抽出するのに、シンプルで効果的です。初心者の方や小規模なプロジェクトには最適です。.
- Scrapy : 以下の管理を目的として設計された、包括的なフレームワーク 大量データ 高度な機能を備えています。.
- Playwright : JavaScriptで生成される複雑なサイトに最適です。実際のブラウザをシミュレートし、人間と同じようにページとやり取りします。.
BeautifulSoupを使ってdivタグの内容を抽出するにはどうすればよいですか?
と BeautifulSoup, 特定のタグをターゲットにするには、 CSSセレクタ. タグの内容を取り出すには <div>, 、以下の手順に従ってください。.
1. 以下の方法でウェブページを取得する requests, 、その後、HTMLを以下の方法で解析する BeautifulSoup.
from bs4 import BeautifulSoup
import requests
url = "URL_DE_TON_SITE" # Remplace par l'URL réelle
reponse = requests.get(url)
html_content = reponse.text
soup = BeautifulSoup(html_content, "html.parser")
2. この方法を使う セレクト CSSセレクタを使ってタグを指定する <div>.
最初の要素を取得するには、以下を使用してください スープ.select_one. すべての要素を取得するには、以下を使用してください スープセレクト. 以下にHTMLコードの例を示します:
<div>
<h2>Titre de l'article</h2>
<p>Voici le contenu du paragraphe.</p>
</div>
では、CSSのセレクタを使った例をご紹介します div.article :
# Récupérer le premier div avec la classe "article"
div_article = soup.select_one("div.article")
# Afficher son contenu texte
if div_article:
print(div_article.get_text(strip=True))
3. 中の要素を取り出す <div>.
# Récupérer le titre à l'intérieur du div
titre = soup.select_one("div.article h2").get_text()
# Récupérer le paragraphe à l'intérieur du div
paragraphe = soup.select_one("div.article p").get_text()
print("Titre :", titre)
print("Paragraphe :", paragraphe)
RequestsとBeautifulSoupはどのように併用できますか?
これら2つのライブラリは 追加 :一方はページを読み込み、もう一方はそれを解析する。.
1. requests HTTPリクエストを送信し、 生のHTMLコード ページの
import requests
url = "https://sitecible.com"
response = requests.get(url) # requête HTTP
print(response.text) # affiche le HTML brut
現時点では、タグだらけの巨大なテキストしかありません(<html>, <div>, <p>など)。
2. BeautifulSoup この生のHTMLを解析し、それを 組織的な構造. そうすれば、ページ内を移動してタグを見つけ、データを取得することができます。.
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, "html.parser") # analyse le HTML
titre = soup.find("h1").get_text() # extrait le contenu d'un <h1>
print(titre)
私のウェブ・スクレイピング・コードが一部のサイトで機能しないのはなぜですか?
スクリプトが何も取得できない場合があります。一部のサイトでは、コンテンツのすべてを直接HTML形式で提供しておらず、代わりに JavaScript データを動的に読み込むためです。しかし、, BeautifulSoup JavaScriptによって返されたデータを分析できない. その場合は、次のようなツールを活用する必要があります。 Playwright どこ Selenium.
ウェブスクレイピングにおいてBeautifulSoupはどのような役割を果たすのか?
BeautifulSoup ~の役割を果たす’HTMLパーサー. ページのコードを、簡単に閲覧できる構造化されたオブジェクトに変換します。つまり、これは 生のHTMLとPythonコード間の変換ツール.
ウェブスクレイピング:BeautifulSoupとScrapy、どちらが良いか?
BeautifulSoup と Scrapy は、どちらも~に用いられるとはいえ、実に異なっています。 ウェブスクレイピング.
| BeautifulSoup | Scrapy |
|---|---|
| HTMLを解析してデータを抽出するためだけのシンプルなライブラリ。 | スクレイピングの全プロセス(リクエスト、リンクの追跡、ページネーション、データのエクスポート、エラー処理)を管理する包括的なフレームワークです。. |
BeautifulSoup 初心者には最適な選択肢です。これにより、’PythonによるHTMLデータ抽出 簡単で手っ取り早い。.
コードの量をできるだけ減らしたい場合は、このツール ブライトデータ コーディングの手間を軽減するために、すぐに使えるデータセットを提供しています。.





