PythonとProxyScrape APIを使って静的サイトと動的サイトをスクレイピングする

ガイド, パイソン, 違い, 月-1020245分で読める

データへの依存度がますます高まる世界において、膨大な量の情報を収集・分析する能力は、企業や専門家に大きな競争力をもたらします。Webスクレイピングは、Webサイトからデータを抽出するプロセスであり、データアナリスト、Web開発者、デジタルマーケティング担当者、Pythonプログラマーの武器となる強力なツールです。このガイドでは、基本的なウェブスクレイピングテクニックと高度なウェブスクレイピングテクニックを紹介し、ベストプラクティスを強調し、静的なウェブサイトと動的なウェブサイトの両方に対応する柔軟なソリューションとして、ProxyScrape's Web Scraping APIを紹介します。

ウェブサイトが静的か動的かを識別する

ウェブサイトが静的か動的かを判断する:

  • ページソースを検査します:右クリックして、"ページソースを表示 "を選択します。すべてのコンテンツが表示され、ページに表示されているものと一致する場合、静的コンテンツである可能性が高い。
  • ブラウザの開発者ツールを使う:ページを右クリックして開発者ツールを開き、"Inspect "を選択し、ページを操作しながら "Network "タブを見る。インタラクションに応じて新しいネットワーク要求が行われる場合、ダイナミックサイトである可能性が高い。
  • JavaScriptを無効にしてください:ブラウザの設定でJavaScriptを無効にして、ページをリロードしてみてください。ページが正しく機能しなくなったり、コンテンツがほとんど表示されない場合は、データの取得とレンダリングをJavaScriptに依存している可能性があり、動的な性質を示しています。

これらの方法は、ウェブサイトが静的か動的かを判断するためのほんの一例にすぎません。他にも戦略はありますが、私たちは、広く利用され、効果的であると思われるこれらのテクニックを分析し、特定しました。

RequestsとBeautifulSoupで静的ウェブサイトをスクレイピングする

静的なコンテンツをスクレイピングするために、PythonはHTTPリクエストを行うための `requests` やHTMLやXMLドキュメントをパースするための `BeautifulSoup` といった堅牢なライブラリを提供している。簡単な例を示します:

  • リクエストするページのHTMLコンテンツを取得するには `requests` を使う。
  • BeautifulSoupで解析する:ページのコンテンツがあれば、`BeautifulSoup`は解析して特定の情報を抽出することができる。
インポートリクエスト
frombs4importBeautifulSoup

レスポンス = requests.get('http://example.com')

soup = BeautifulSoup(response.text,'html.parser')

# 必要なデータを抽出する
data = soup.find_all('p')

この方法は、ウェブスクレイピングを始めたばかりの人に最適です。静的なコンテンツを持つウェブサイトに効果的で、最小限のセットアップで済みます。

動的ウェブサイトのスクレイピング

動的なウェブサイトには、別の課題がある。これらのウェブサイトはJavaScriptで非同期にコンテンツをロードするため、最初のページロードにデータが存在しないため、HTMLスクレイピングは機能しません。

ダイナミック・ウェブサイト・スクレイピングのアプローチには2つの方法がある:

  • 最初のアプローチは、Playwright/Seleniumのようなブラウザ・オートメーション・ライブラリを使ってコンテンツを取得し、Beautifulsoupでパースするというものだ。
  • つ目のアプローチは、ネットワーク・タブで探偵ごっこをして、ウェブサイトがデータを取得するために使っているエンドポイントを突き止めるようなものだ。そして、Pythonの'request'モジュールを使って、そのデータを自分で取得します。

Playwrightでダイナミックなウェブサイトをナビゲートする

動的コンテンツをスクレイピングするために、 Playwrightのようなツールは実際のユーザーのブラウザとのやり取りを模倣し、動的に読み込まれるデータをスクレイピングすることを可能にする。PlaywrightとPythonの使い方を簡単に説明します:

  • Playwrightのインストール:Playwrightパッケージとコマンドラインツールをインストールする。
    - "pip install playwright"
    - "playwright install"
  • Playwrightを使ってインタラクションをシミュレートする:ウェブサイトをナビゲートし、ダイナミックコンテンツのロードをトリガーするために必要なインタラクションを行うスクリプトを書く。
from playwright.sync_api import sync_playwright


if __name__ =='__main__':

   with sync_playwright() as p:

       ブラウザ = p.chromium.launch(headless=True)

      page= browser.new_page()

      page.goto('https://www.scrapethissite.com/pages/ajax-javascript/')

      # ここでインタラクションをシミュレートする

      page.click('//*[@id="2014"]')

      # ダイナミックコンテンツを抽出する

       content =page.inner_text('//*[@id="oscars"]/div/div[5]/div/table')

      print(content)

       ブラウザを閉じる

ネットワークパネルを解析して API エンドポイントを取得します:

  • デベロッパーツールを開く
    a.
    b. ページ上の任意の場所で右クリックし、Inspectを選択するか、Ctrl+Shift+I(MacではCmd+Option+I)を押して開発者ツールを開く。
  • ネットワーク・タブの検査
    a. 開発者ツールのNetworkタブをクリックする。
    b. ページを更新して、最初からトラフィックのキャプチャを開始する。
  • AJAXリクエストのフィルタリングと識別
    a. XHR (XMLHttpRequest)のような、AJAXリクエストによく使われるタイプによって、リクエストをフィルタリングすることができます。
    b. ボタンをクリックしたり、フォームに入力したり、スクロールしたりするように、ページとインタラクトして、コンテンツの動的なロードをトリガーしてください。
    c. これらのアクションを実行したときに表示されるネットワークリクエストを観察してください。興味のあるデータをフェッチするリクエストを探す。
  • リクエストを分析する
    a.
    b. ヘッダーセクションをチェックして、リクエストメソッド(GET、POSTなど)、URL、その他のヘッダーを確認する。
  • Python
    を使ってリクエストを複製する a. Headerタブの情報を使って、Pythonのrequestsライブラリを使ってリクエストを複製します。以下はその基本的な例です:
import requests

# URL from the AJAX request
url = 'https://example.com/api/data'

# Any headers you observed that are necessary, like user-agent, authorization tokens, etc.
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36,gzip(gfe)',
    'Authorization': 'Bearer token_if_needed'
}

# If it's a POST request, you might also need to send data
data = {
    'example_key': 'example_value'
}

# Replace 'get' with 'post' if the request type is POST
response = requests.get(url, headers=headers, data=data if 'post' in locals() else None)

# To view the response
print(response.json()) 

両方のシナリオにウェブスクレイピングAPIを活用する

リクエストとPlaywrightやその他のHttpクライアント・ライブラリを使いこなすことは、やりがいのあることではあるが、正しく処理するためには時間と労力を必要とする。別のアプローチとしては、スクレイピングタスクの複雑さを抽象化するウェブスクレイピングAPIを活用する方法がある。HTTPリクエストの送信を代行してくれるだけでなく、特定のウェブサイトでブロックされるのを防ぐためのアンチバン技術もサポートしてくれる。

ProxyScrape ウェブスクレイピングAPIのご紹介

ProxyScrapeは、静的および動的なウェブサイトからのデータ抽出を簡素化する WebスクレイピングAPIを提供しています。

APIの特徴は以下の通り:

  • 動的サイトや静的サイトとの統合が容易。
  • 様々なタイプのウェブスクレイピング活動を包括的にサポート。
  • 豊富なIPアドレスプール
  • 最大100,000リクエストまで無料で提供されるため、ユーザーはすぐに投資することなく、APIの可能性を最大限に探り、実現することができる。
  • スクレイピングの難しさで知られるウェブサイト向けに調整された、洗練されたアンチバン・テクノロジー。
  • アクションは、ウェブサイトの出力を受信するタイミングを正確に制御することができます。これには、特定のURLリクエストの待機、サイト上の要素の出現予測、スクロール後のアクティビティなどが含まれます。活用方法

ProxyScrape 静的なウェブサイトによるウェブスクレイピングAPI:

これは、静的ウェブサイト用のPythonスクリプトや、ブラウザの検査パネルから抽出したAPIエンドポイントを呼び出すためのPythonスクリプトに、当社のウェブスクレイピングAPIを組み込む方法の説明です:

import requests
import base64
import json

data = {
    "url": "https://books.toscrape.com/",
    "httpResponseBody": True
}

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.post('https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request', headers=headers, json=data)

if response.status_code == 200:
    json_response = response.json()
    if 'browserHtml' in json_response['data']:
        print(json_response['data']['browserHtml'])
    else:
        print(base64.b64decode(json_response['data']['httpResponseBody']).decode())
else:
    print("Error:", response.status_code)

ProxyScrape 動的なウェブサイトによるウェブスクレイピングAPI:

ファビコンがロードされ始めるのを待つ例です。これは通常、私たちが使用しているテストウェブサイトでキックオフする最後のリクエストです。

import requests
import json

url = 'https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request'

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': '<your api key>'  # Make sure to replace <your api key> with your actual API key
}

payload = {
    "url": "https://books.toscrape.com/",
    "browserHtml": True,
    "actions": [
        {
            "action": "waitForRequest",
            "urlPattern": "https://books.toscrape.com/static/oscar/favicon.ico",
            "urlMatchingOptions": "exact"
        }
    ]
}

response = requests.post(url, headers=headers, json=payload)

# Print the response from the server
print(response.text)  # Prints the response body as text

ウェブスクレイピングのベストプラクティス

どのようなツールやAPIを選ぶにせよ、ウェブサイトの利用規約を尊重し、IPバンを避けるためにリクエストレートを制限し、匿名のスクレイピングのためにプロキシを使用することは重要なベストプラクティスです。 ProxyScrapeは、このようなニーズに対応するプレミアム、レジデンシャル、モバイル、専用プロキシを提供するだけでなく、倫理的なウェブスクレイピングを推奨しています。

結論

  • 趣味でWebスクレイピングを始めるにせよ、プロのツールキットに組み込むにせよ、静的なWebサイトと動的なWebサイトの区別を理解し、両方を効果的にスクレイピングする方法を知ることは不可欠です。RequestsやPlaywright/SeleniumのようなPythonライブラリとBeautifulsoupを組み合わせることで、Webスクレイピングの課題に対応できるようになります。
  • ウェブスクレイピングスクリプトがボットとして検出され、その後ブロックされている場合、またはリクエスト送信プロセスを最適化し簡素化したい場合は、当社のウェブスクレイピングAPIをご検討ください。お客様に代わってこれらの問題を効率的に管理するように設計されています。
  • ウェブスクレイピングの未来は明るい。ベストプラクティスにこだわり、最先端のツールを活用することで、発見されるのを待っているデータの世界を解き放つことができる。

ウェブスクレイピングの冒険を始める準備はできましたか?今すぐ ProxyScrape にサインアップして、弊社の専用プロキシ、住宅用プロキシ、および包括的なウェブスクレイピング API を使用して、ウェブの無限の可能性を探求しましょう。