の世界に飛び込んでみませんか? ウェブスクレイピング 複雑なコードに煩わされることなく?
と パイソン と図書館 ビューティフル・スープ、簡単にできます データの抽出と整理 わずか数行でウェブサイトを説明すること。

PythonでBeautifulSoupを使ってスクレイピングするための前提条件
✅ 始める前に、いくつかのことを知っておくことが重要です。 プログラミングの基礎.そうすることで、コードがどのように機能するかをよりよく理解できるようになる。 専門家である必要はありませんが、Pythonスクリプトを読み、実行する方法を知っていると非常に役立ちます。
次に、まずやるべきことは以下の通りだ。 を作る Pythonでスクレイピング ビューティフルスープで:
- インストール パイソン および開発環境。
- インストール
ピップPythonライブラリを簡単に追加できるツール。 - インストール ビューティフル・スープ というコマンドを使う:
pip install beautifulsoup4
- インストール リクエスト コマンドでウェブページを検索する:
pip install リクエスト
PythonとBeautifulSoupでウェブスクレイピングをするには?
簡単なウェブスクレイピング・プロジェクトのチュートリアルに従いましょう。

プロジェクト : ページのタイトルと、そのページに含まれるすべてのリンクを取得する。
ステップ 1: リクエストでページの内容を取得する
を実施する。 HTTP GETリクエスト をURLに追加するには リクエスト.
📌 RequestsでHTTPリクエストを送信すると、サーバーは常にステータスコー ドを返します。これらのコードは、リクエストが成功したかどうかを示します。
200 成功した。
301 / 302 リダイレクション。
404 ページが見つかりません。
500 内部サーバーエラー。
.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コードを含む文字列が得られる。このHTMLを簡単に操作するには ビューティフル・スープ オブジェクトを作成する ビューティフル・スープ.「html.parserこれにより、BeautifulSoupはHTMLを正しく解釈し、警告を回避することができます。from bs4 import BeautifulSoup
インポートリクエスト
url = "https://bonjour.com"
レスポンス = requests.get(url)
html = response.text
# パーサを指定することを推奨する
soup = BeautifulSoup(html, "html.parser")
ステップ3:要素の検索と抽出
- 用途
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"))
- 属性による要素のターゲティング
以下のような属性で検索を絞り込むことができます。 クラス, ID またはその他のHTML属性。
⚠️ 述べる Pythonでは、次のように書きます。 クラス それ以外の クラス 予約語 クラス.
# 特定のidを持つdivの取得
container = soup.find("div", id="main")
# 特定のクラスを持つすべてのリンクを取得する
nav_links = soup.find_all("a", class_="nav-link")
- でCSSセレクタを使用する。
セレクト
より正確な検索には セレクト をCSSセレクタで指定します。
# 記事タイトルの全リンク
article_links = soup.select("article h2 a")
# 全て <a> href属性が "http "で始まるもの。
links_http = soup.select('a[href^="http"]')
The CSSセレクタ 特定のページの一部を正確にターゲットにしたい場合、HTML全体を手動で確認する必要がなく、非常に強力です。
BeautifulSoupを使用してHTMLテーブルからデータを抽出する方法

これまで、ウェブページからタイトル、リンク、テキストを抽出する方法を見てきました。
⚠ しかし、実際の使用例はより複雑な場合が多い: 構造化データ抽出 テーブルやリスト、ページネーションの管理、スクレイピングに関連するよくあるエラーの解決などです。まさに、これから一緒に見ていく内容です。
表とリストの抽出
ウェブサイトは多くの場合、データを HTMLテーブル (<table>, <tr>, <th>, <td>または リスト (
- /
- )。これらの構造を使用可能なデータに変換するためには、行ごと、あるいは要素ごとに構造を調べる方法を学ぶ必要がある。
いつでも HTMLテーブルを取り出す原理は単純だ:
- ヘッダーの回復 (
<th>)で列見出しを識別する。 - ✅ 各行をブラウズする (
<tr>)とセルの検索(<td>を含む)。 - ✅ 情報をリストや辞書に保存する。
の場合 HTMLリスト (
- または
- の組み合わせ) :
- ✅ すべてのタグを見つける
と- 。
find_all. - ✅ コンテンツ(テキストまたはリンク)を取得し、Pythonリストに追加する。
要約すれば :
タグ
<table>,<tr>,<th>,<td>はテーブルの再構築に使われる。
タグ/,はHTMLのリストを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, ...).
📌 どちらの場合も、次のことが必要です。 カール (ループでブラウズ)してすべてのページをフェッチし、データをマージする。
ページパラメーターを使用した例 :
インポートタイム インポート リクエスト 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.get(url)- サイトが応答しない場合の待ち時間を制限する。
requests.get(url, timeout=20)- パーサーのページ。
BeautifulSoup(response.text、"html.parser")- すべての記事のタイトルを取得する。
find_all("h2", class_="title")- 見つかった項目をグローバルリストに追加する。
all_articles.extend(articles)- 各リクエストの間に一時停止を導入することで、サーバーに負荷をかけすぎず、BANされないようにする。
time.sleep(1.0)- ループの後
すべての記事を含む 全5ページのタイトル.
よくある過ちと課題
❗ スクラッピングは、ボタンを押すだけで全てがうまくいくとは限りません。以下のような障害に頻繁に遭遇する可能性があります:
- HTTPエラー
404 ページが見つかりません
403 アクセス禁止
500 サーバー側エラー例 :
response = requests.get(url) if response.status_code == 200: # ページOK print("ページの取得に成功しました") elif response.status_code == 404: print("エラー:ページが見つかりません") else: print("コードが返されました:", response.status_code)- スクレイピングをブロックするサイト
一部は自動リクエストを検知し、アクセスをブロックします。
- 動的ページ(JavaScript)
BeautifulSoupは静的なHTMLしか読まない。ページがその JavaScriptコンテンツ何も見えないだろう。
この場合、次のようなツールを使用します。 セレン どこ 劇作家.
しかし、ブロックされたり、サイトに損害を与えたりすることなく、効率的にスクレイピングしたいのであれば、ベストプラクティスを紹介しよう:
- を尊重する。 robots.txtファイル ウェブサイト
- セットアップ 締め切り time.sleep()を使う)。
- 使用 代理人 そして回転させる。
- 定期的な交換 ユーザーエージェント.
SeleniumとBeautifulSoupでウェブをスクラップするには?

SeleniumとBeautifulSoupを使ったChromeでのWebスクレイピング。Alucare.frのクリスティーナ ⚠ 備忘録 BeautifulSoupは優れたHTML解析ツールですが、ウェブページのJavaScriptを実行することはできません。そこでSeleniumが活躍します!
基本的にセレン 実際のブラウザを操作するJavaScriptを実行し、人間が閲覧しているかのようにページを表示する。ページが完全にレンダリングされると、BeautifulSoupはHTMLコードを解析する。そのため、欲しいものを抽出することができる。
ステップ1:SeleniumとBeautifulSoupをインストールする
ここでは、Requestライブラリを使用する代わりに、 セレンインストールするには、以下を経由する必要があります。 ピップ.
pip install selenium beautifulsoup4次に ウェブドライバー は、お使いのブラウザのバージョンに対応しています(例:Google Chrome用のChromeDrive)。
✅ Pythonスクリプトと同じフォルダに配置するか、または環境変数PATHに追加する システムの
ステップ 2: Seleniumの設定
まず第一に、以下をインポートする必要があります。 ウェブドライバ Seleniumからブラウザを制御する。
from selenium import webdriver from selenium.webdriver.common.by import By次にブラウザを起動します。ブラウザがウェブページを開き、 はJavaScriptを実行します。 (例:Chrome)。
driver = webdriver.Chrome()ブラウザーにどのページにアクセスするかを指示する。
driver.get("https://www.exemple.com")ページが特定の要素の表示に時間がかかる場合、Seleniumに少し待つよう指示することができます。
driver.implicitly_wait(10)ステップ3:ページ・コンテンツの取得
ページが読み込まれたら フルDOM (JS実行後のHTMLソースコード)。
html_content = driver.page_sourceステップ4:BeautifulSoupによるHTML解析
このソースコードをBeautifulSoupに渡して、活用できるようにしましょう:
from bs4 import BeautifulSoup # BeautifulSoupオブジェクトの作成 soup = BeautifulSoup(html_content, 'html.parser') # 例: ページ上の全てのタイトルを取得 titles = soup.find_all('h2') for title in titles: print(title.get_text())👉 BeautifulSoupは、find()、find_all()、CSSセレクタなどの強力なメソッドを提供しています。 ターゲット と 要素を抽出する HTMLコード。
ステップ5:ブラウザを閉じる
非常に重要:実行後は必ずブラウザを閉じてリソースを解放してください!
ドライバー終了()✅ そうです!Seleniumのパワーを組み合わせて、次のことができるようになりました。 ヒューマン・ナビゲーションをシミュレート (クリック、スクロールなど)と、HTMLコードの解析におけるBeautifulSoupの効率性を組み合わせます。
よくある質問
Pythonでウェブスクレイピングをするのに最適なツールは?
本当に万能なツールというものは存在せず、プロジェクトに応じて適したソリューションがあるだけです。
🔥 ビューティフル・スープ HTMLパーサー:シンプルで効果的にHTMLを分析し、素早くコンテンツを抽出します。HTMLを分析し、素早くコンテンツを抽出するためのシンプルで効果的なツールです。
🔥 スクラップ : これは、高度な機能を備えた大量のデータを管理するために設計された、包括的なフレームワークです。
🔥 劇作家 : JavaScriptで生成された複雑なサイトに最適です。実際のブラウザをシミュレートし、人間のようにページと対話できるためです。
タグからコンテンツを抽出するBeautifulSoupの使い方 <div> ?
BeautifulSoupを使えば、特定のビーコンをターゲットにすることができます。 CSSセレクタ.からコンテンツを抽出するには <div>以下はその手順である:
- Requestsでページを取得し、BeautifulSoupで分析する。
from bs4 import BeautifulSoup インポートリクエスト url = "URL_OF YOUR_SITE" # 実際のURLに置き換える レスポンス = requests.get(url) html_content = response.text soup = BeautifulSoup(html_content, "html.parser")- を使用する。
セレクトタグをターゲットにするCSSセレクタを渡します。<div>
最初の項目を取り出すには
スープ.select_oneすべてのアイテムを取得するには
スープセレクトHTMLの例:
<div class="article"> <h2>記事タイトル</h2> <p>その段落にはこうある。</p> </div>CSSを使った例:
# "article "クラスを持つ最初のdivを取り出す div_article = soup.select_one("div.article") # そのテキストコンテンツを表示する if div_article: print(div_article.get_text(strip=True))ここで、CSSセレクタは
div.article.- 内部の要素を抽出する
<div>
# div内のタイトルを取得する title = soup.select_one("div.article h2").get_text() # div内の段落を取得する パラグラフ = soup.select_one("div.item p").get_text() print("タイトル:", タイトル) print("段落:", 段落)RequestsとBeautifulSoupはどのように併用できますか?
この2つのライブラリーは互いに補完し合っている。
- Requests は HTTP リクエストを使用してウェブページのコンテンツを取得します。
ターゲット・サイトにHTTPリクエストを送り、ページの生のHTMLコードをダウンロードする。
輸入リクエスト url = "https://sitecible.com" response = requests.get(url) # HTTPリクエスト print(response.text) #は生のHTMLを表示する。この段階では、タグでいっぱいの巨大なテキストしかない(<html>,<div><p>など)。
- BeautifulSoupはこのHTMLコンテンツを分析し、あなたの興味のあるものを抽出します。
HTMLの生のデータを取得し、整理された構造に変換します。これにより、HTML内を簡単にナビゲートし、データの検索、抽出、取得を行うことができます。
from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, "html.parser") #はHTMLを解析する。 title = soup.find("h1").get_text() #は、HTMLのコンテンツを抽出する。 <h1> print(タイトル)私のウェブ・スクレイピング・コードが一部のサイトで機能しないのはなぜですか?
サイトによっては、すべてのコンテンツをHTMLで直接提供しているわけではないので、スクリプトは何も取得できないかもしれない。
これらのサイトはJavaScriptを使用してデータを動的に読み込みます。しかし、BeautifulSoupではJavaScriptでレンダリングされたデータを分析する.
このような場合は、次のようなツールをご利用ください。 劇作家 どこ セレン.
ウェブスクレイピングにおいてBeautifulSoupはどのような役割を果たすのか?
BeautifulSoupはHTMLパーサー.
それはページのソースコードをプレーンテキストの形で取得し、簡単に閲覧できる構造化されたオブジェクトに変換します。
このライブラリがなければ、読めない巨大なテキストのブロックが表示されます。簡単に言うと、BeautifulSoupは プレーンHTML そして パイソンコード.
ウェブスクレイピング:BeautifulSoup vs Scrapy?
ビューティフル・スープ と スクラップ は、どちらもウェブスクレイピングに使われるが、まったく異なるものだ。
ビューティフル・スープ スクラップ HTMLを解析してデータを抽出するためだけのシンプルなライブラリ。 スクレイピング・プロセス全体を管理する完全なフレームワーク
(クエリー、リンクトラッキング、ページネーション、データエクスポート、エラー管理)。要約すると、BeautifulSoupはPythonによるHTMLデータ抽出.このライブラリーは、スクレイピングを素早く簡単に行えるので、初心者に最適だ。
そうでない場合は コーディングなし、包括的なツール ブライトデータ はウェブスクレイピングのための優れたソリューションでもある。
👉さて、あなたが何をかき集めることができたか、コメントで教えてください!
- ✅ すべてのタグを見つける
- と
- ヘッダーの回復 (
- 、





