PythonでBeautifulSoupを使ってWebスクレイピングをするには?

反応する:

コメント

の世界に飛び込んでみませんか? ウェブスクレイピング 複雑なコードに煩わされることなく?

パイソン と図書館 ビューティフル・スープ、簡単にできます データの抽出と整理 d’un site web en quelques lignes seulement.

BeautifulSoupを使ったPythonでのWebスクレイピング。
BeautifulSoupでPythonでWebスクレイピング。Alucare.frのクリスティーナ

PythonでBeautifulSoupを使ってスクレイピングするための前提条件

✅ Avant de vous lancer, il est important d’avoir quelques プログラミングの基礎.そうすることで、コードがどのように機能するかをよりよく理解できるようになる。 Pas besoin d’être expert, mais savoir lire et exécuter un script Python vous aidera beaucoup.

次に、まずやるべきことは以下の通りだ。 を作る Pythonでスクレイピング ビューティフルスープで:

  • インストール パイソン ainsi qu’un environnement de développement.
  • インストール ピップ, l’outil qui permet d’ajouter facilement des bibliothèques Python.
  • インストール ビューティフル・スープ というコマンドを使う:
pip install beautifulsoup4
  • インストール リクエスト コマンドでウェブページを検索する:
pip install リクエスト

PythonとBeautifulSoupでウェブスクレイピングをするには?

簡単なウェブスクレイピング・プロジェクトのチュートリアルに従いましょう。

BeautifulSoupを使ったPythonでのWebスクレイピングの仕組みを示す画像。
BeautifulSoupを使ったPythonでのWebスクレイピングの仕組みを示す画像。Alucare.frのクリスティーナ

プロジェクト : récupérer le titre d’une page et tous les liens qu’elle contient.

ステップ 1: リクエストでページの内容を取得する

を実施する。 HTTP GETリクエスト をURLに追加するには リクエスト.

📌 RequestsでHTTPリクエストを送信すると、サーバーは常にステータスコー ドを返します。これらのコードは、リクエストが成功したかどうかを示します。

200 成功した。
301 / 302 リダイレクション。
404 ページが見つかりません。
500 内部サーバーエラー。

リクエスト, vous pouvez vérifier le résultat d’une requête grâce à l’attribut .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コードを分析する

Quand vous récupérez le contenu d’une page avec リクエスト (レスポンステキスト)、そのページのすべてのHTMLコードを含む文字列が得られる。このHTMLを簡単に操作するには ビューティフル・スープ オブジェクトを作成する ビューティフル・スープ.
📌 生のHTMLをBeautifulSoupに渡すときは パーサー (例): 「html.parser). Cela permet à BeautifulSoup d’interpréter correctement le HTML et d’éviter les avertissements.
from bs4 import BeautifulSoup
インポートリクエスト

url = "https://bonjour.com"
レスポンス = requests.get(url)
html = response.text

# パーサを指定することを推奨する
soup = BeautifulSoup(html, "html.parser")

ステップ3:要素の検索と抽出

HTMLを ビューティフル・スープをクリックすると、目的のデータ(HTMLタグ)を検索して取り出すことができる。

  • 用途 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セレクタ sont très puissants si vous voulez cibler exactement certaines parties d’une page sans parcourir tout le HTML manuellement.

Comment extraire des données d’un tableau HTML avec BeautifulSoup ?

BeautifulSoupを使用してHTMLテーブルからデータを抽出します。
Extraire des données d’un tableau HTML avec BeautifulSoup. ©Christina pour Alucare.fr

Jusqu’ici, nous avons vu comment récupérer des titres, des liens ou encore du texte dans une page web.

⚠ Mais souvent, les vrais cas d’utilisation sont plus complexes : 構造化データ抽出 comme des tableaux ou des listes, la gestion de la pagination ou encore la résolution d’erreurs fréquentes liées au scraping. C’est exactement ce que nous allons voir ensemble.

表とリストの抽出

ウェブサイトは多くの場合、データを HTMLテーブル (<table>, <tr>, <th>, <td>または リスト (

    /
    1. )。これらの構造を使用可能なデータに変換するためには、行ごと、あるいは要素ごとに構造を調べる方法を学ぶ必要がある。

      いつでも HTMLテーブルを取り出す原理は単純だ:

      • ヘッダーの回復 (<th>)で列見出しを識別する。
      • ✅ 各行をブラウズする (<tr>)とセルの検索(<td>を含む)。
      • ✅ 情報をリストや辞書に保存する。

      の場合 HTMLリスト (

        または
        1. の組み合わせ) :

          • ✅ すべてのタグを見つける
          • find_all.
          • ✅ コンテンツ(テキストまたはリンク)を取得し、Pythonリストに追加する。

          要約すれば :

          タグ <table>, <tr>, <th>, <td> はテーブルの再構築に使われる。
          タグ

            /
              ,
            1. は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"].

              ここでは、すべての

            2. はそのままPythonのリストアイテムに変換され、次のような結果になります。 [アップル」、「バナナ」、「オレンジ」]。.

              ページネーションとリンクの管理

              多くの場合、データは1ページに収まらない。その場合は “page suivante” または 番号付きページネーション (?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)

              簡単に説明しよう:

              • Préparer l’URL avec un emplacement {} pour insérer le numéro de la page.
              BASE_URL = "https://bonjour.com/articles?page={}
              • Certains sites bloquent les requêtes sans “identité de navigateur”. Ajouter un User-Agent évite d’être pris pour un bot.
              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")
              • Récupérer tous les titres d’articles.
              find_all("h2", class_="title")
              • 見つかった項目をグローバルリストに追加する。
              all_articles.extend(articles)
              • 各リクエストの間に一時停止を導入することで、サーバーに負荷をかけすぎず、BANされないようにする。
              time.sleep(1.0)
              • ループの後 すべての記事 を含む 全5ページのタイトル.

              よくある過ちと課題

              ❗ Le scraping, ce n’est pas toujours appuyer sur un bouton et tout est bon. Vous pourrez rencontrer des obstacles fréquents comme :

              • 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)
              
              • スクレイピングをブロックするサイト

              Certains détectent les requêtes automatiques et bloquent l’accès.

              • 動的ページ(JavaScript)

              BeautifulSoupは静的なHTMLしか読まない。ページがその JavaScriptコンテンツ何も見えないだろう。

              この場合、次のようなツールを使用します。 セレン どこ 劇作家.

              しかし、ブロックされたり、サイトに損害を与えたりすることなく、効率的にスクレイピングしたいのであれば、ベストプラクティスを紹介しよう:

              • を尊重する。 robots.txtファイル d’un site web.
              • セットアップ 締め切り time.sleep()を使う)。
              • 使用 代理人 そして回転させる。
              • 定期的な交換 ユーザーエージェント.

              SeleniumとBeautifulSoupでウェブをスクラップするには?

              ChromeでSeleniumとBeautifulSoupを使ってWebスクレイピング。
              SeleniumとBeautifulSoupを使ったChromeでのWebスクレイピング。Alucare.frのクリスティーナ

              備忘録 : BeautifulSoup est un excellent analyseur HTML, mais il ne peut pas exécuter JavaScript d’une page web. C’est là que Selenium devient votre allié !

              基本的にセレン 実際のブラウザを操作するJavaScriptを実行し、人間が閲覧しているかのようにページを表示する。ページが完全にレンダリングされると、BeautifulSoupはHTMLコードを解析する。そのため、欲しいものを抽出することができる。

              ステップ1:SeleniumとBeautifulSoupをインストールする

              Ici, au lieu d’utiliser la bibliothèque Request, on va utiliser セレン. Pour l’installer, il faut passer par ピップ.

              pip install selenium beautifulsoup4 

              次に ウェブドライバー は、お使いのブラウザのバージョンに対応しています(例:Google Chrome用のChromeDrive)。

              ✅ Vous pouvez soit le placer dans le même dossier que votre script Python, soit l’ajouter à la variable d’environnement PATH システムの

              ステップ 2: Seleniumの設定

              まず第一に、以下をインポートする必要があります。 ウェブドライバ Seleniumからブラウザを制御する。

              from selenium import webdriver
              from selenium.webdriver.common.by import By 

              On lance ensuite un navigateur. C’est lui qui ouvrira la page web et はJavaScriptを実行します。 (例:Chrome)。

              driver = webdriver.Chrome() 

              ブラウザーにどのページにアクセスするかを指示する。

              driver.get("https://www.exemple.com") 

              Si la page met du temps à afficher certains éléments, vous pouvez dire à Selenium d’attendre un peu.

              driver.implicitly_wait(10) 

              ステップ3:ページ・コンテンツの取得

              ページが読み込まれたら フルDOM (JS実行後のHTMLソースコード)。

              html_content = driver.page_source 

              ステップ4:BeautifulSoupによるHTML解析

              Passez maintenant ce code source à BeautifulSoup pour pouvoir l’exploiter :

              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:ブラウザを閉じる

              Très important : fermez toujours votre navigateur après l’exécution pour libérer les ressources !

              ドライバー終了() 

              ✅ そうです!Seleniumのパワーを組み合わせて、次のことができるようになりました。 ヒューマン・ナビゲーションをシミュレート (clics, défilements, etc.) avec l’efficacité de BeautifulSoup pour l’analyse du code HTML.

              よくある質問

              Pythonでウェブスクレイピングをするのに最適なツールは?

              Il n’y a pas vraiment de meilleur outil universel, mais plutôt des solutions adaptées selon votre projet.

              🔥 ビューティフル・スープ HTMLパーサー:シンプルで効果的にHTMLを分析し、素早くコンテンツを抽出します。HTMLを分析し、素早くコンテンツを抽出するためのシンプルで効果的なツールです。

              🔥 スクラップ : c’est un framework complet, pensé pour gérer de gros volumes de données avec des fonctionnalités avancées.

              🔥 劇作家 : parfait pour les sites complexes générés par JavaScript, car il simule un vrai navigateur et permet d’interagir avec la page comme un humain.

              タグからコンテンツを抽出するBeautifulSoupの使い方 <div> ?

              BeautifulSoupを使えば、特定のビーコンをターゲットにすることができます。 CSSセレクタ.からコンテンツを抽出するには <div>以下はその手順である:

              1. 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")
              1. を使用する。 セレクト タグをターゲットにする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.

              1. Extraire des éléments à l’intérieur de la <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つのライブラリーは互いに補完し合っている。

              1. Requests récupère le contenu d’une page web avec une requête HTTP.

              ターゲット・サイトにHTTPリクエストを送り、ページの生のHTMLコードをダウンロードする。

              輸入リクエスト
              
              url = "https://sitecible.com"
              response = requests.get(url) # HTTPリクエスト
              print(response.text) #は生のHTMLを表示する。

              この段階では、タグでいっぱいの巨大なテキストしかない(<html>,<div><p>など)。

              1. BeautifulSoupはこのHTMLコンテンツを分析し、あなたの興味のあるものを抽出します。

              Elle prend le HTML brut et le transforme en une structure organisée. Grâce à ça, vous pouvez naviguer facilement à l’intérieur du HTML : faire du repérage, extraire et récupérer les données.

              from bs4 import BeautifulSoup
              
              soup = BeautifulSoup(response.text, "html.parser") #はHTMLを解析する。
              title = soup.find("h1").get_text() #は、HTMLのコンテンツを抽出する。 <h1>
              print(タイトル)

              私のウェブ・スクレイピング・コードが一部のサイトで機能しないのはなぜですか?

              サイトによっては、すべてのコンテンツをHTMLで直接提供しているわけではないので、スクリプトは何も取得できないかもしれない。

              Ces sites utilisent JavaScript pour charger dynamiquement les données. Or, BeautifulSoup ne permet pas d’JavaScriptでレンダリングされたデータを分析する.

              このような場合は、次のようなツールをご利用ください。 劇作家 どこ セレン.

              ウェブスクレイピングにおいてBeautifulSoupはどのような役割を果たすのか?

              BeautifulSoup joue le rôle d’HTMLパーサー.

              Il prend le code source d’une page sous forme de texte brut et le transforme en un objet structuré que vous pouvez parcourir facilement.

              このライブラリがなければ、読めない巨大なテキストのブロックが表示されます。簡単に言うと、BeautifulSoupは プレーンHTML そして パイソンコード.

              ウェブスクレイピング:BeautifulSoup vs Scrapy?

              ビューティフル・スープスクラップ は、どちらもウェブスクレイピングに使われるが、まったく異なるものだ。

              ビューティフル・スープ スクラップ
              HTMLを解析してデータを抽出するためだけのシンプルなライブラリ。 スクレイピング・プロセス全体を管理する完全なフレームワーク
              (クエリー、リンクトラッキング、ページネーション、データエクスポート、エラー管理)。

              Pour tout résumé, BeautifulSoup facilite l’PythonによるHTMLデータ抽出.このライブラリーは、スクレイピングを素早く簡単に行えるので、初心者に最適だ。

              そうでない場合は コーディングなし, l’outil complet ブライトデータ はウェブスクレイピングのための優れたソリューションでもある。

              👉さて、あなたが何をかき集めることができたか、コメントで教えてください!

気に入りましたか?シェアする

このコンテンツはもともと フランス語で (すぐ下のエディタを参照)。DeeplやGoogle翻訳APIを使用して様々な言語で翻訳・校正されており、できるだけ多くの国で利用できるようになっています。この翻訳には毎月数千ユーロのコストがかかっています。もし100 %が完璧でない場合は、コメントを残していただければ修正いたします。校正や翻訳記事の品質向上にご興味のある方は、お問い合わせフォームからメールをお送りください!
私たちは、私たちのコンテンツを改善するためにあなたのフィードバックに感謝します。ご意見・ご感想は、お問い合わせフォームまたは下記までお寄せください。 あなたのコメントは、私たちのウェブサイトAlucare.frの品質を向上させるために常に役立ちます。


Alucareは独立系メディアです。Googleニュースのお気に入りに追加して応援してください:

ディスカッション・フォーラムにコメントを投稿する