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

反応する:

コメント

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

パイソン と図書館 ビューティフル・スープ、簡単にできます データの抽出と整理 わずか数行でウェブサイトを説明すること。

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

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

✅ 始める前に、いくつかのことを知っておくことが重要です。 プログラミングの基礎.そうすることで、コードがどのように機能するかをよりよく理解できるようになる。 専門家である必要はありませんが、Pythonスクリプトを読み、実行する方法を知っていると非常に役立ちます。

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

  • インストール パイソン および開発環境。
  • インストール ピップPythonライブラリを簡単に追加できるツール。
  • インストール ビューティフル・スープ というコマンドを使う:
pip install beautifulsoup4
  • インストール リクエスト コマンドでウェブページを検索する:
pip install リクエスト

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

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

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

プロジェクト : ページのタイトルと、そのページに含まれるすべてのリンクを取得する。

ステップ 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をBeautifulSoupに渡すときは パーサー (例): 「html.parserこれにより、BeautifulSoupはHTMLを正しく解釈し、警告を回避することができます。
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セレクタ 特定のページの一部を正確にターゲットにしたい場合、HTML全体を手動で確認する必要がなく、非常に強力です。

BeautifulSoupを使用してHTMLテーブルからデータを抽出する方法

BeautifulSoupを使用してHTMLテーブルからデータを抽出します。
BeautifulSoupを使用してHTMLテーブルからデータを抽出する。©Christina for Alucare.fr

これまで、ウェブページからタイトル、リンク、テキストを抽出する方法を見てきました。

⚠ しかし、実際の使用例はより複雑な場合が多い: 構造化データ抽出 テーブルやリスト、ページネーションの管理、スクレイピングに関連するよくあるエラーの解決などです。まさに、これから一緒に見ていく内容です。

表とリストの抽出

ウェブサイトは多くの場合、データを 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=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でウェブをスクラップするには?

              ChromeでSeleniumとBeautifulSoupを使ってWebスクレイピング。
              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>以下はその手順である:

              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. 内部の要素を抽出する <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 は HTTP リクエストを使用してウェブページのコンテンツを取得します。

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

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

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

              1. 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データ抽出.このライブラリーは、スクレイピングを素早く簡単に行えるので、初心者に最適だ。

              そうでない場合は コーディングなし、包括的なツール ブライトデータ はウェブスクレイピングのための優れたソリューションでもある。

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

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

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


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

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