OpenSource-Hub

Scrapling

フレームワーク

D4Vinci/Scrapling

アダプティブWebスクレイピングフレームワーク。アンチスクレイピングを自動的に回避し、要素を移動します。

概要

Scrapling は、単一のリクエストから大規模なクローリングまで対応する適応型ウェブスクレイピングフレームワークです。そのパーサーはウェブサイトの変化を学習し、ページが更新された際に要素を自動的に再特定します。Cloudflare Turnstile などのスクレイピング対策システムを回避する機能を内蔵しており、並行マルチセッションクローリングやプロキシローテーションもサポートしています。

README プレビュー

\n\n\n    \n        \n          \n          \n        \n    \n    \n    Effortless Web Scraping for the Modern Web\n\n\n\n    \n    \n    العربيه | Español | Português (Brasil) | Français | Deutsch | 简体中文 | 日本語 |  Русский | 한국어\n    \n    \n        \n    \n        \n    \n    \n        \n    \n        \n    \n    \n      \n    \n    \n      \n    \n    \n    \n        \n\n\n\n    Selection methods\n    ·\n    Fetchers\n    ·\n    Spiders\n    ·\n    Proxy Rotation\n    ·\n    CLI\n    ·\n    MCP\n\n\nScrapling is an adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl.\n\nIts parser learns from website changes and automatically relocates your elements when pages update. Its fetchers bypass anti-bot systems like Cloudflare Turnstile out of the box. And its spider framework lets you scale up to concurrent, multi-session crawls with pause/resume and automatic proxy rotation - all in a few lines of Python. One library, zero compromises.\n\nBlazing fast crawls with real-time stats and streaming. Built by Web Scrapers for Web Scrapers and regular users, there's something for everyone.\n\n```python\nfrom scrapling.fetchers import Fetcher, AsyncFetcher, StealthyFetcher, DynamicFetcher\nStealthyFetcher.adaptive = True\np = StealthyFetcher.fetch('https://example.com', headless=True, network_idle=True)  # Fetch website under the radar!\nproducts = p.css('.product', auto_save=True)                                        # Scrape data that survives website design changes!\nproducts = p.css('.product', adaptive=True)                                         # Later, if the website structure changes, pass `adaptive=True` to find them!\n```\nOr scale up to full crawls\n```python\nfrom scrapling.spiders import Spider, Response\n\nclass MySpider(Spider):\n  name = "demo"\n  start_urls = ["https://example.com/"]\n\n  async def parse(self, response: Response):\n      for item in response.css('.product'):\n

FAQ (5)

トラブル対応
Claude Desktop で Docker MCP 接続エラー: 'pull access denied for scrapling, repository does not exist' を修正する方法

claude_desktop_config.json では scrapling ではなく、完全な Docker イメージ名 pyd4vinci/scrapling を使用してください。

1. イメージをプルします:

docker pull pyd4vinci/scrapling

2. MCP サーバーの設定を更新します:

{
  "mcpServers": {
    "ScraplingServer": {
      "command": "/usr/local/bin/docker",
      "args": ["run", "-i", "--rm", "pyd4vinci/scrapling", "mcp"]
    }
  }
}

macOS では、Docker のインストール方法に応じて、command は "docker" または /usr/local/bin/docker にすることもできます。

3. ファイルを保存し、Claude Desktop を完全に再起動します。

このエラーは、Docker が scrapling を scrapling:latest という名前のイメージとして解釈するのに対し、実際にプルされたイメージは pyd4vinci/scrapling:latest であるために発生します。

参照 Issue #282
トラブル対応
scraplingでlxml 6を使用した際の "DeprecationWarning: The 'strip_cdata' option of HTMLParser()" の修正方法

この警告は、scrapling(≤0.4.15)が lxml の HTMLParser() に strip_cdata を渡しているために表示されます。lxml 6 ではこのオプションが非推奨になりました(このオプションは元々何の効果もなく、将来削除される予定で、削除後は TypeError が発生します)。修正方法:

1. **scrapling をアップグレードする** — メンテナーは dev ブランチでこのオプションを削除済みです。0.4.15 の次のリリースに更新してください:pip install -U scrapling
2. **一時的な回避策 — lxml を 6 未満に固定する**:pip install "lxml<6"
3. 現在のバージョンを使い続けなければならない場合は**警告を抑制する**:Selector を作成する前に warnings.filterwarnings("ignore", message=".*strip_cdata.*", category=DeprecationWarning) を追加してください。

参照 Issue #492
トラブル対応
なぜ Scrapling の StealthyFetcher の fetch() は、solve_cloudflare=True の場合、timeout よりもはるかに長い時間がかかるのですか?

Scrapling 0.4.15 では、Cloudflare Turnstile ソルバーが一部のチャレンジバリアントでは決して一致しないウィジェットロケーターを待ち続け、かつリトライループに上限がないため、fetch(..., timeout=15000) 呼び出しが 74 秒以上実行されることがあります(timeout 引数は操作ごとの制限であり、フェッチ全体のデッドラインではありません)。修正方法と回避策:

1. **アップグレード**:次回リリースに向けて dev ブランチで修正済みです。見つからないウィジェットへの待機が削除され、ソルバーのリトライループに上限が設定されました。dev ビルドをインストールするか、リリース後に 0.4.15 より新しいバージョンへアップグレードしてください。
2. **セッションの再利用**:cf_clearance クッキーは持続するため、ソルバーが実行されるのは最初のフェッチのみです。実測値:最初のページは約 8 秒、その後は 1 ページあたり約 3 秒。
3. **外部のウォールクロック**:影響を受けるバージョンでは timeout= だけでは呼び出しの実行時間を制限できないため、フェッチを個別のワーカープロセスで実行し、デッドラインを超過したものを強制終了してください。

なお、この呼び出し自体はステータス 200 で成功し、正しいコンテンツが返されます。これは純粋にレイテンシのバグであり、失敗ではありません。

参照 Issue #468
トラブル対応
Windows で管理者として実行する際の StealthyFetcher TargetClosedError の修正方法

Windows上でPythonを管理者権限(昇格状態)で実行すると、Scraplingの追加の--disable-featuresスイッチがpatchright/Playwrightのリストを置き換え、AutoDeElevateが除外されます。その結果、Chromiumは権限を降格して再起動した後に終了し、TargetClosedError: BrowserType.launch_persistent_contextが発生します。scrapling 0.4.15での回避策:降格防止フラグを明示的に渡してください。

from scrapling.fetchers import StealthyFetcher
StealthyFetcher.fetch("https://example.com", headless=True, extra_flags=["--do-not-de-elevate"])

恒久的な修正:disabled-featuresのリストはdevブランチでマージされているため、0.4.15以降の次のリリースにアップグレードしてください。または、管理者権限のないシェルからスクリプトを実行してください。

参照 Issue #463
トラブル対応
ClawHubのScrapling skillのページが空白または壊れているのはなぜですか?

これは一時的な障害(openclaw/clawhub#2345)であり、解決されました。https://clawhub.ai/D4Vinci/scrapling-official のページは現在動作しています。それでも空のページが表示される場合は、フォールバックとして agent-skill GitHubディレクトリのzipファイルを使用してみてください:https://github.com/D4Vinci/Scrapling/tree/main/agent-skill

参照 Issue #290