「PythonでScraplingとScrapelessを使ってプロダクショングレードのウェブスクレイパーを構築する方法」
Expert in Web Scraping Technologies
主なポイント:
- Scraplingは3つのフェッチャーと適応セレクターを提供します。 HTTP
Fetcher(ブラウザのTLSなりすまし機能付き)、PlaywrightベースのDynamicFetcher、およびStealthyFetcherは、静的ページ、JavaScriptレンダリングページ、そして中程度のボット対策を1つのPythonライブラリでカバーし、適応セレクターは構造によって要素を見つけ出します。 - エスカレーションはHTTP → ステルス → クラウドブラウザです。 まずは機能する最も安価なフェッチャーから始めてください。ローカルのステルスがIPの評判、上級ボット管理者、または地理的制約のあるコンテンツに引っかかる場合、パーシングコードを再記述することなくクラウドブラウザにエスカレートします。
- 統合は1行です。 ScraplingのPlaywrightフェッチャーをCDP経由でScrapelessセッションに向けます —
DynamicFetcher.fetch(url, cdp_url=session.browser_ws_endpoint)— これにより、レンダリング、プロキシエグレス、およびフィンガープリンティングはすべてクラウド側で行われます。 - Scrapelessはエグレスとフィンガープリンティングを管理します。 Scrapeless Scraping Browserは195か国以上の住宅プロキシを通じてルーティングし、セッションごとにブラウザのフィンガープリントをランダム化するため、クラウドブラウザはローカルのステルスブラウザでフィルタリングされるページをレンダリングします。
- 適応セレクターはDOMのドリフトに耐えます。 Scraplingは、レイアウト変更後に要素を前の属性と位置に基づいて再配置することで、ターゲットサイトがマークアップを回転させてもスクリーパーが行を返し続けます。
- 開始は無料です。 新しいScrapelessアカウントには無料のScraping Browserランタイムが含まれます — Scrapeless にサインアップしてください。
はじめに:ローカルのステルスが行き詰まったら
動的でJavaScriptが多く、ボット対策が施されたページは、単純なHTTPスクリーパーが静かに失敗する場所です。requests + BeautifulSoupスクリプトはHTTP 200を返し、空の結果セットを返します: 解析されたマークアップにはデータが含まれておらず、価格、リスティング、またはレビューは初期応答後にJavaScriptによって注入されます。ページはブラウザでは正しく表示され、スクリーパーには空に見えます。
Scraplingは基準を引き上げます。これは3つのフェッチャーを持つ高速Pythonスクレイピングライブラリです — 実際のブラウザのTLSハンドシェイクをなりすますHTTP Fetcher、JavaScriptレンダリングのためのPlaywrightサポートのDynamicFetcher、およびステルスパッチとCloudflareの処理を追加するStealthyFetcher — そしてDOMの変更に耐える適応セレクター。これにより静的ページおよび中程度のボット対策をカバーします。しかし、あなたのノートパソコンで動作するブラウザは、既知の評判を持つデータセンターまたは家庭用IPを持っており、高度なボット管理者はページレベルのステルスがどれほどきれいであっても自動化をフィンガープリンティングします。その時点でページは人間に表示され、あなたのためにチャレンジされます。
このチュートリアルは、2つの層で成り立つPythonパイプラインを構築します。層1はScrapling単体 — 静的および中程度保護されたページに最適なツールです。層2はScraplingのDynamicFetcherをScrapeless Scraping Browser経由でCDPルーティングし、レンダリングが住宅プロキシの背後でクラウド側で行われ、各セッションごとの検出防止フィンガープリンティングが行われる間、あなたのScraplingパーシングコードはそのままです。エージェントフレームワークを使ってフェッチャーの代わりに同じScrapeless Scraping Browserのプリミティブを動かす場合は、LangChain統合投稿をご覧ください。
あなたが構築できるもの
2層パターン — Scraplingフェッチャーを前に、Scrapeless Scraping Browserをエスカレーションの後ろに配置することは、プレーンなHTTPスクリーパーが壊れるほとんどの仕事に対応します:
- SPAストアの価格と在庫監視。 2番目のXHRを介して価格が水分補給される単ページアプリ製品ページをレンダリングし、その後Scraplingが解析したDOMから数値を抽出します。
- SERP隣接の抽出。 JavaScriptとして配送される検索スタイルの結果ページからオーガニック結果ブロックとスニペットを引き出し、適応セレクターでそれらをページングします。
- JavaScriptディレクトリからのリードリスト。 クライアントサイドで行をレンダリングするビジネスリスティングおよびメンバー目録サイトを移動し、連絡先フィールドを型付きレコードに収集します。
- 住宅エグレスを介した地理的特定のスナップショット。 Scrapelessプロキシ国を固定することで、地元のユーザーが見るであろうリスティング、価格、または可用性をキャプチャします。
- レンダリングページのRAG取り込み。 出版社とドキュメンテーションページをレンダリングして埋め込みパイプライン用のクリーンなコンテンツにし、取得層がページが実際に表示するものをインデックス化します。
- レイアウト変更に耐える復元力のあるスクリーパー。 Scraplingの適応セレクターに依存して、スケジュールされたスクリーパーがターゲットサイトがDOMを再配置した後でも行を返し続けるようにします。
- 高度なボット防止の背後での困難なターゲット抽出。 ローカルのステルスではクリアできない高度なボット管理者がフロントロードした際に、同じScraplingコードをScrapeless Scraping Browserにエスカレートします。
Scrapelessでは、適用される法律、規制、およびウェブサイトのプライバシーポリシーを厳格に遵守し、公開されているデータにのみアクセスします。この投稿の内容はデモンストレーション目的のみです。
ScraplingとScrapelessを組み合わせる理由
Scraplingは解析、フェッチャーのエルゴノミクス、適応セレクタを処理し、Scrapeless Scraping Browserはローカルブラウザでは実行できない回避機能を扱います。両者は、ハンドオフが単一のCDPエンドポイントであるため、クリーンに組み合わさります。
- アンチ検出クラウドブラウザ。 Scrapeless Scraping Browserは、自社開発のChromiumを使用し、完全なクラウドサイドのJavaScriptレンダリングを実行するため、SPA、無限スクロールフィード、遅延読み込みパネルがScraplingに解析される前に水分を吸収します。
- 195か国以上の住宅用プロキシ。 セッションを作成する際に
proxy_countryを設定すると、クラウドブラウザはターゲット地域の実際の住宅IPからエグレスするため、ジオバウンドページはローカルユーザーが見ているものを返します。 - セッションごとのフィンガープリンティングのランダム化。 各セッションにはランダム化されたフィンガープリント(ユーザーエージェント、タイムゾーン、WebGL、およびキャンバス)が付与されるため、繰り返し実行しても単一の検出可能なアイデンティティにはなりません。
cdp_urlドロップイン。 Scrapelessのセッションエンドポイントをcdp_urlとしてDynamicFetcher.fetch(...)に渡すだけで、ScraplingのAPIに他の変更はなく、同じセレクタ、同じ結果オブジェクト、同じ解析コードが保たれます。session_ttlによるセッション持続性。 セッション作成時にsession_ttlを設定することで、複数のページロードを通じてセッションを保持し、温かいクッキーとナビゲーション状態が単一の実行内でのリクエスト間で引き継がれます。
ランタイムは無料で開始でき、使用量に応じてスケールします — ティアについてはScrapelessの価格を参照し、Scrapelessの無料プランでAPIキーを取得してください。
Scraplingがrequests、BeautifulSoup、およびScrapyと比較してどうか
現在のスタックがrequests + BeautifulSoupまたはScrapyである場合、Scraplingがどこに適合し、Scrapelessクラウドブラウザが背後にあると何が変わるのかを以下に示します。
| ツール | JavaScriptをレンダリング | アンチボット / ステルス | セレクタの耐障害性 | 最適 |
|---|---|---|---|---|
requests + BeautifulSoup |
いいえ | なし(生のHTTP) | 手動;再設計時に壊れる | 小規模な静的ページとJSON API |
| Scrapy | アドオン(例えば、Playwright統合)を介してのみ | 内蔵なし | 手動;再設計時に壊れる | 大規模な非同期クロールを自分で構築しホストする |
Scrapling — Fetcher |
いいえ | ブラウザ-TLSの偽装 | 適応セレクタが利用可能 | フィンガープリンタに対応したHTTPでの高速静的フェッチ |
Scrapling — DynamicFetcher / StealthyFetcher |
はい(ローカルブラウザ) | ステルスパッチ、Cloudflareの処理 | 適応セレクタ | JSページと中程度のアンチボット、あなたのマシンで |
Scrapling + Scrapeless (cdp_url) |
はい(クラウドブラウザ) | 195か国以上の住宅プロキシ + セッションごとのフィンガープリンティング | 適応セレクタ | JS重視、ジオバウンド、または大規模な厳しいアンチボットページ |
進行は加算的です。すでに機能しているrequests/BeautifulSoupはそのまま維持し、ページにブラウザまたはフィンガープリンタ対応HTTPが必要なときはScraplingのフェッチャーを利用し、ローカルレンダリングがフィルターされるときはScraplingをScrapeless Scraping Browserにcdp_url経由でルートします。解析コード - page.css(...), page.xpath(...) - はすべての3つを通じて同一です。
前提条件
開始する前に、次のものを確認してください:
- Python 3.10以上 - Scrapling 0.4.8が必要です。
- pip - 以下のパッケージをインストールします。
- ScrapelessアカウントとAPIキー - Scrapeless Websiteで無料プランにサインアップし、それから設定 → APIキー管理からキーを取得してください。
- CSS/XPathセレクタおよびターミナルの基本的な知識 - ページを取得し、そこから値を引き出すために使用します。
インストール
必要なのは2つのパッケージだけです:Scraplingはフェッチと解析用、公式のScrapeless SDKはクラウドブラウザセッションを作成します。
1. ScraplingとScrapeless SDKをインストールする
bash
pip install "scrapling[fetchers]" scrapeless
scrapling install # DynamicFetcher / StealthyFetcher用にローカルブラウザを取得します(cdp_url経由でリモートScrapelessクラウドブラウザのみを使用する場合はスキップ)。
scrapling[fetchers]はフェッチ・解析層(Fetcher、DynamicFetcher、StealthyFetcherクラスとparselのようなセレクタAPI)を提供し、一方scrapelessはScrapeless Scraping Browserセッションを作成し、接続するためのCDPエンドポイントを手に入れる公式SDKです。
2. Scrapeless APIキーを設定する
SDKが読み取れるように、キーをエクスポートします:
bash
export SCRAPELESS_API_KEY=your_api_token_here
Windowsでは、setx SCRAPELESS_API_KEY "your_api_token_here"(持続的、新しいシェル)または$env:SCRAPELESS_API_KEY="your_api_token_here"(現在のPowerShellセッション)を使用してください。Scrapeless SDKはこの変数を自動的に読み取ります—コード内でキーを渡す必要はありません。
3. インストールのスモークテスト
3つのフェッチャーをインポートし、静的ページからいくつかの値を取得することで環境を確認します:
python
from scrapling.fetchers import Fetcher, DynamicFetcher, StealthyFetcher
page = Fetcher.get("https://quotes.toscrape.com/")
print(page.status, len(page.css("span.text::text")), "quotes") # -> 200 10 quotes
200 10 quotesが表示されれば、Scraplingは正しくインストールされ、解析が行われていることを示し、Scrapeless Scraping Browserの接続の準備が整いました。
ステップ1 — 3つのScraplingフェッチャー
Scraplingは、速度を回避と交換する3つのフェッチャーを提供します。一般的な目安は、必要なデータを返す最も軽量なものを選び、リクエストがブロックされたり空で返された場合にのみエスカレートすることです:通常のHTTPにはFetcherから始め、ページがJavaScriptを必要とする場合はDynamicFetcherに移行し、ボット対策レイヤーがある場合はStealthyFetcherを使用します。
| フェッチャー | エンジン | 使用するタイミング |
|---|---|---|
Fetcher |
curl_cffiによるHTTP(ブラウザ-TLSの偽装) |
静的ページとJSON API — JavaScript不要 |
DynamicFetcher |
Playwright | JSレンダーされたページ、SPA、レイジーロードコンテンツ |
StealthyFetcher |
Stealth Playwright | Cloudflareのインタースティシャルなどのボット防御 |
3つのフェッチャーは同じモジュールからインポートされ、parselのようなレスポンスを返すため、セレクターAPI(.css(...)、.xpath(...))はどのフェッチャーがページを生成しても同じです。
python
from scrapling.fetchers import Fetcher
# ブラウザ-TLS偽装によるHTTPフェッチ;parselのようなResponseを返す。
page = Fetcher.get("https://books.toscrape.com/", impersonate="chrome", stealthy_headers=True)
title = page.css("article.product_pod h3 a::attr(title)") # -> 最初の本のタイトル
python
from scrapling.fetchers import DynamicFetcher
# PlaywrightがJSをレンダリングし、その後水分補給されたページをparselのようなResponseとして返す。
# ローカルブラウザが必要(`scrapling install`を実行)またはcdp_url経由でリモートブラウザ使用(次のステップ)。
page = DynamicFetcher.fetch("https://quotes.toscrape.com/js/", network_idle=True)
quotes = page.css("span.text::text") # -> JSレンダーされた引用、現在表示されている
python
from scrapling.fetchers import StealthyFetcher
# Stealth Playwrightがボット対策のハンドシェイクを試み、その後ページを返す。
page = StealthyFetcher.fetch("https://example.com/protected-page",
solve_cloudflare=True, block_webrtc=True, hide_canvas=True)
content = page.css("main ::text") # -> チャレンジがクリアされた後のページテキスト
ステップ2 — プロキシを追加(ローカルのステルスが止まる場所)
クリーンなデータセンターIPは、ボットマネージャーが最初にフラグを立てるものの一つです。リクエストを住宅用プロキシ経由でルーティングすることで、出口アドレスが普通の家庭用接続のように見えるため、これらのIPレピュテーションブロックが解除されます。すべてのScraplingフェッチャーは同じproxy=引数を通じてプロキシを受け入れるため、残りのコードを変更せずに追加できます。
python
from scrapling.fetchers import Fetcher, StealthyFetcher
# どのフェッチャーにもproxy=経由でプロキシ文字列を渡す。
page = Fetcher.get("https://books.toscrape.com/",
proxy="http://<user>:<pass>@<host>:<port>")
# StealthyFetcherもanti-botチャレンジを処理する際に同じ引数を取ります。
page = StealthyFetcher.fetch("https://example.com/protected-page",
proxy="http://<user>:<pass>@<host>:<port>",
solve_cloudflare=True)
ここがScrapelessがプロキシの話にフィットする場所です。Scrapelessは195以上の国に住宅用プロキシを提供し、それらをScraplingの前面に配置する2つの方法があります。最も簡単な道は、クラウドブラウザセッションレベルでそれらを適用することです:DynamicFetcherをScrapeless Scraping Browserセッションに接続する際、proxy_countryで出口をピン止めし、プロキシ文字列には一切触れません。Scrapelessはまた、独立したプロキシ製品も提供しており、そのゲートウェイ資格情報はScraplingのproxy=引数に直接ドロップできます—提供内容はScrapelessのプロキシソリューションで確認し、正確なゲートウェイ文字列はdocs.scrapeless.comで確認できます。
良好なプロキシはIPレピュテーション問題を修正しますが、すべてを修正するわけではありません。ローカルのステルスブラウザは、クリーンな出口IPに関係なく、高度なボットマネージャーによってフィルタリングされ、重いクライアントサイドJavaScriptで停止します。これがまさにScrapelessクラウドブラウザが引き継ぐところです — 次のステップで説明します。
ステップ3 — ScraplingをScrapelessクラウドブラウザ経由でルーティング(cdp_url)
ローカルのステルスが切れたときには、クライアントサイドでの重いレンダリング、先進的なボット管理、または特定の国からのみ解決されるページがある場合、SDKを使用してScrapelessセッションを作成し、そのCDPエンドポイントをScraplingに渡します。SDKがセッションを発行し、Scraplingがそれを利用します。住宅プロキシ(proxy_country)とブラウザのフィンガープリンティングは、Scrapeless Scraping Browserによってクラウド側で処理されるため、Scraplingのコードは唯一の追加引数cdp_urlを除いて同じままです。
python
from scrapeless import Scrapeless
from scrapeless.types import ICreateBrowser
from scrapling.fetchers import DynamicFetcher
client = Scrapeless() # SCRAPELESS_API_KEYを読み取ります
session = client.browser.create(ICreateBrowser(proxy_country="US", session_ttl=240))
page = DynamicFetcher.fetch(
"https://quotes.toscrape.com/js/",
cdp_url=session.browser_ws_endpoint,
network_idle=True,
)
quotes = page.css("span.text::text")
authors = page.css("small.author::text")
session.browser_ws_endpointは、形式wss://browser.scrapeless.com/browser?token=...&proxy...のWebSocket CDP URLです — Scraplingはローカルブラウザに接続するのと同じ方法でそれに接続します。その前後が全ての要点です:普通のFetcher.getをhttps://quotes.toscrape.com/js/で実行すると0件の引用文が返されます。なぜなら、HTTPはページのJavaScriptを実行できないからです。一方、Scrapelessのcdp_urlを通じて取得された同じページは10件の引用文(およびその著者)をレンダリングします。これはプラットフォームの動作であり、調整テクニックではありません — クラウドブラウザがJSを実行し、その後Scraplingが生成されたDOMを解析します。
StealthyFetcher.fetch(...)は、Scraplingのステルスレイヤーをクラウドブラウザの上に追加したいときに、同じパターンでcdp_urlを受け入れます。
ステップ4 — DOMのドリフトに耐える適応セレクタ
セレクタは、あらゆるスクレイパーの中で最も壊れやすい部分です。デザイン変更がクラス名を変更したり、要素を移動したりすると、すべてのcss(...)呼び出しが何も返さなくなります。Scraplingの適応モードはそれに対抗します。フェッチにadaptive=True(およびオプションでadaptive_domain=...)を渡すと、Scraplingは選択した各要素のフィンガープリントを保存します。DOMが移動すると、保存した要素は正確なパスではなく類似性によって再配置されるため、レイアウト変更を跨いでセレクタが解決され続けます。
python
from scrapling.fetchers import DynamicFetcher
# 最初の実行:通常通りセレクト;Scraplingは各要素の見た目を記憶します。
page = DynamicFetcher.fetch(
"https://quotes.toscrape.com/js/",
cdp_url=session.browser_ws_endpoint,
network_idle=True,
adaptive=True,
adaptive_domain="quotes.toscrape.com",
)
quotes = page.css("span.text::text")
# 後で、サイトがマークアップを再配置した後:同じ呼び出しで再選択します。
# "span.text"がもはや一致しなくても、適応モードが保存された要素を再配置します。
page = DynamicFetcher.fetch(
"https://quotes.toscrape.com/js/",
cdp_url=session.browser_ws_endpoint,
network_idle=True,
adaptive=True,
adaptive_domain="quotes.toscrape.com",
)
quotes = page.css("span.text::text")
頻繁に外観が変更されるページをスクレイプする際には適応セレクタを使用してください — 小さなDOMの変化を吸収し、真の再設計後だけにセレクタを再訪問すれば済みます。
ステップ5 — 一つのクラウドセッションで複数のページをクロール
ほとんどのリアルな仕事は一つのURL以上にまたがります — ページネーションリスト、検索結果、カテゴリーツリー。ページごとに新しいクラウドブラウザを発行すると、ウォームセッションが無駄になり、接続ハンドシェイクが毎回再度行われます。ScraplingのDynamicSessionは、Scrapelessクラウドブラウザへの単一の接続を保持し、すべてのページを通じてそれをフェッチしますので、クッキー、住宅ID、およびナビゲーションの状態はクロール全体にわたって維持されます。
python
from scrapeless import Scrapeless
from scrapeless.types import ICreateBrowser
from scrapling.fetchers import DynamicSession
client = Scrapeless()
session = client.browser.create(ICreateBrowser(proxy_country="US", session_ttl=300))
rows = []
with DynamicSession(cdp_url=session.browser_ws_endpoint) as crawler:
for n in range(1, 4): # ページ1..3
url = "https://quotes.toscrape.com/js/" if n == 1 else f"https://quotes.toscrape.com/js/page/{n}/"
page = crawler.fetch(url, network_idle=True)
quotes = page.css("span.text::text")
authors = page.css("small.author::text")
rows += [{"quote": str(q), "author": str(a)} for q, a in zip(quotes, authors)]
print(len(rows), "行") # ここで10件の引用行が蓄積されます
各ページは10件の引用行を生成し、一度再利用されたクラウドブラウザセッションを通じてrowsに蓄積されます。network_idle=Trueは、抽出前に各ページがハイドレートされるのを待機します;短いまたは空のページは、リストの終わりではなく再試行のシグナルと見なしてください。リストから詳細へのクロールの場合、最初にリストを取得し、page.css("a::attr(href)")を使って詳細URLを収集し、その後同じcrawlerを通じて各URLを取得します — 住宅セッションとフィンガープリントは全体の歩行を通じて一定です。
ステップ6 — 生産段階での強化
作業スクリプトから信頼できる仕事に移行するには、主にバックプレッシャーと回復について考える必要があります。いくつかのルールが大部分の重みを持っています。
- 同時接続数を制限する。 ホストあたり ≤3のクラウドブラウザセッションを保持します。それを超えると、レートリミットや接続のリセットを招き、マージナルなスループットは追加の失敗を正当化することはほとんどありません。
- 一過性の接続エラーをバックオフを伴って再試行。
ERR_TUNNEL_CONNECTION_FAILEDなどのトンネルやタイムアウトエラーは本質的に一過性です。それらをキャッチし、指数バックオフで待機して再試行してください。単一の接続失敗をデッドページとして扱わないでください。 ProxyRotatorで出口を回転させる。 ScraplingのProxyRotatorは、リクエスト間でプロキシをサイクルさせるため、特定のIPからターゲットに対してハンマーを打たないようにします。Geo制約のある作業には、Scrapelessの住宅プロキシと組み合わせて使用してください。- ステップ間でセッションを再利用する。
session_ttl(例:240秒)を使って一度ミントし、マルチステップフローを通じて同じbrowser_ws_endpointを渡します。リクエストごとに新しいブラウザを立ち上げるコストを支払う代わりに、ログイン、ナビゲート、抽出を行います。 - 欠落フィールドをnullableとして扱う。 実際のページは、一部の行に評価、著者、価格を省略することがあります。欠落しているセレクターを存在するものとして主張するのではなく、
Noneにデフォルト設定してください。そうすれば、1つのまばらなレコードが実行をクラッシュさせることはありません。
無料プランでAPIキーを取得: Scrapeless
返ってくる内容
json
[
{
"quote": "私たちが作り出した世界は、私たちの思考のプロセスです。それは私たちの思考を変えなければ変えることはできません。",
"author": "アルバート・アインシュタイン"
},
{
"quote": "私たちの選択こそが、本当の私たちを示すのです、ハリー。それは私たちの能力よりもはるかに多くのことを示しています。",
"author": "J.K.ローリング"
},
{
"quote": "人生を生きる方法はたった2つだけです。一つは何も奇跡ではないかのように生きること。もう一つはすべてが奇跡であるかのように生きることです。",
"author": "アルバート・アインシュタイン"
}
]
// 形状はステップ3の抽出を反映しています。値は例示的なサンプルです。
このパイプラインを運用する中でのいくつかの誠実な観察:
- JSレンダリングページにはクラウドブラウザが必要です。
https://quotes.toscrape.com/js/の単純なHTTPフェッチは0行を返します。cdp_urlを介して到達するクラウドブラウザのみがJavaScriptを実行するため、Scraplingがそれを解析できます。 network_idle=Trueは水和を待機します。 ネットワークが安定するまで保持し、これは最初のペイント後にコンテンツを取得するページでは重要です。- 適応セレクターは破損を減らしますが、検証は減らしません。 小さなDOMの変動を吸収しますが、大規模な再設計の後はセレクター探索を再実行し、出力を確認する必要があります。
- Geo制約のあるページには
proxy_countryを固定します。 価格、可用性、同意壁は地域によって異なります。proxy_countryを設定すると、ターゲットするロケールに一致する結果を維持できます。 - 静的ページにはこれらは必要ありません。
Fetcher.getがすでにデータを返している場合は、それを使用します。HTTPが空またはブロックされた場合にのみクラウドブラウザにエスカレートします。 - 一過性のトンネルと5xxエラーは再試行可能です。 一度きりの
ERR_TUNNEL_CONNECTION_FAILEDや500は通常、ネットワークのノイズであり、コードの欠陥ではありません。バックオフして再試行してください。
結論:最初は軽量フェッチャー、ブロックされたときはクラウドブラウザ
パイプラインは3つの動きに簡略化されます。動作する最も軽量なフェッチャーを選択します — 静的HTMLの場合はFetcher.get。ページが空、ブロックされている、またはgeoゲートされている場合には、session.browser_ws_endpointをScraplingのcdp_urlに渡してScrapeless Scraping Browserにエスカレートします。その後、適応セレクターで解析を行い、次のレイアウト変更に耐えられる抽出を実現します。実際に必要なときだけクラウドブラウザの料金を支払うことになります。 — どのような無料プランがカバーしているかはScrapelessの料金を確認してください — 残りのコードは普通のScraplingのままです。
ここから、同じcdp_urlパターンが大きなシステムに接続されます。クラウドレンダリングをエージェントに接続するためのLangChain + Scrapelessガイドや、完全なサイト構築のためのEtsyスクレイパーウォークスルーを参照してください。出荷する前に:SCRAPELESS_API_KEYをエクスポートし、geo制約のあるページにはproxy_countryを固定し、ホストあたりの同時セッションを≤3に保ち、欠落フィールドをnullableとして扱ってください。
FAQ
ウェブスクレイピングは合法ですか?
一般に利用可能なデータをスクレイピングすることは、多くの法域で許可されていることが多いですが、法は一様ではありません。各サイトの利用規約を確認し、権利のない個人情報や著作権データを収集することを避けてください。また、ルールは法域によって異なることを忘れないでください。疑問がある場合は、特定の使用ケースについて法律的なアドバイスを受けてください。
プロキシは必要ですか?
大規模なデータに関しては、その通りです。住宅のエグレスはデータセンターのIPと比較してブロックを大幅に削減し、地域によってコンテンツを制限するページには必須です。Scrapelessは195カ国以上で住宅プロキシを提供しており、セッションを生成する際にproxy_countryを設定するか、プロキシゲートウェイを通してルーティングすることで、自分でIPを調達してローテーションする必要がありません。
クラウドブラウザが必要な時とローカルScraplingが必要な時
Fetcher.getがデータを返すときはローカルのままで大丈夫です — それが最も早い道です。ページがクライアントサイドのJavaScriptに重い場合、先進的なボットマネージャーによって前面表示されている場合、または地理的に制限されている場合は、cdp_urlを介してScrapelessクラウドブラウザに切り替えます。クラウドブラウザはJSを実行し、ローカルフェッチでは対応できないアンチデetectionと住宅エグレスを適用します。
ERR_TUNNEL_CONNECTION_FAILEDや5xxエラーが続くのはなぜ?
リトライしてください。それは一時的な接続エラーであり、スクリプトのバグではありません。フェッチをリトライループに包み、指数バックオフと適切な上限を設けてください。これらの多くは2回目または3回目の試行で解決します。
サイトのデザイン変更後にセレクターが壊れました。どう修正しますか?
適応セレクター(adaptive=Trueとadaptive_domain=...)をオンにして、Scraplingがマイナードムの変化を通じて保存された要素を再配置できるようにします。大規模なデザイン変更の後は、セレクター発見を再実行して新しいマークアップを確認し、その後適応モードで再度保持させます。
尊重すべき同時実行の制限はありますか?
ホストごとにクラウドブラウザセッションを≤3に保ってください。それ以上になると、スループットを少し失う代わりに、大量のレート制限と接続リセットを受けます。すべてのリクエストを一度に発射するのではなく、制限付き同時実行とキューを使用してください。
Scraplingは独自のMCPを提供します(pip install "scrapling[ai]") — これはどう関係しますか?
両方を重ねることができます。ScraplingのMCPはAIエージェントにローカルライブラリへの直接制御を与え、Scrapeless MCPサーバーはそのエージェントにアンチデetectionと住宅プロキシを使用したクラウドレンダリングを提供します。一緒に使うか、スタックに合ったものを選んでください。このガイドはライブラリパスを取ります — Scraplingがcdp_urlを介してScrapelessクラウドブラウザを駆動し、統合を単一の引数に保ち、追加のサーバーを実行する必要がないようにします。
AI駆動のデータパイプラインを構築する準備はできましたか?
私たちのコミュニティに参加して無料プランを取得し、ScraplingとScrapelessのデータパイプラインを構築している開発者とつながりましょう: Discord · Telegram。
Scrapelessにサインアップして無料のスクレイピングブラウザランタイムを取得し、上記のパターンをパイプラインが必要とするページや地域に合わせて調整してください。完全なリファレンスはdocs.scrapeless.comをご覧ください。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



