Scrapling — 高速リクエストとステルスブラウザを統合したPython製スクレイピングフレームワーク
D4Vinci/Scrapling
★ 101,679 ・ Python ・ BSD-3-Clause
概要
Scraplingは、単一ページのデータ取得から大規模な並行クローリングまで幅広くカバーするPython向けのWebスクレイピングフレームワークです。
通常の高速なHTTPリクエスト送信に加え、JavaScriptレンダリングやCloudflare Turnstileなどの検証に対応するステルスブラウザの制御、CSS・XPath・正規表現による柔軟なデータ抽出、そしてクロールの中断・再開や自動流量調整(AutoThrottle)を備えたスパイダー機能を単一のライブラリに統合しています。さらに、ターミナル操作向けのCLIや、AIエージェントと接続するためのMCP(Model Context Protocol)サーバー機能も提供されており、プログラムからの実行だけでなくAIツールと連携したデータ収集を行いたい開発者にも適しています。
主な特徴
-
Scrapy風の非同期スパイダーAPI
start_urlsや非同期のparseコールバック、Request/Responseオブジェクトを用いた設計を採用しており、Scrapyに馴染みのあるユーザーにとって親しみやすい構成で並行クローリングを記述できます。 -
高度なリクエスト送信とステルスブラウザ対応
高速なHTTP通信を行うFetcherクラスとヘッドレスブラウザを単一のスパイダー内で統合して扱えます。ブラウザのTLSフィンガープリントやヘッダーの模倣、Cloudflare Turnstile/Interstitialのハンドリングに対応しています。 -
多彩なパース・抽出・Markdown出力
CSSセレクタやXPathはもちろん、テキスト検索、正規表現検索、アダプティブな要素追跡、類似要素マッチングをサポートし、ウェブページをクリーンなMarkdown形式で出力することも可能です。 -
クロール運用を支援する各種機能
crawldirを指定することで未処理のリクエストや訪問済みURLを保存し、Ctrl+Cで安全に中断したあとに再開できます。また、応答速度に応じてリクエスト間隔を自動調整するAutoThrottleや、robots.txtの遵守設定も備わっています。 -
豊富なテンプレートとエクスポート機能
リンクをルールに従って巡回するCrawlSpiderやサイトマップ対応のSitemapSpider、フィード向けのXMLFeedSpider/CSVFeedSpider、Shopify対応のShopifySpiderなどのテンプレートが用意されており、収集データはJSON、JSONL、CSV、XMLへ標準で書き出せます。 -
AI・CLI連携(MCPサーバー対応)
AIエージェントがウェブを閲覧・抽出できるようにするMCPサーバーやAgent Skill、CLIコマンド、対話型シェルが同梱されています。
使い方
単一ページの取得とデータ抽出
単一ページのスクレイピングを行う場合は、Fetcher クラスを利用してページを取得し、CSSセレクタなどで要素を抽出します。
from scrapling.fetchers import Fetcher
# ページの取得
page = Fetcher.get('https://quotes.toscrape.com/')
# CSSセレクタを用いたテキストの抽出
quotes = page.css('.quote .text::text').getall()
print(quotes)
スパイダーによるクローリングとファイル出力
複数ページや構造化されたクロールを行う場合は、Spider クラスを継承してクローラーを定義します。以下のコードでは、名言サイトから名言と著者を抽出して quotes.json に保存しています。
from scrapling.spiders import Spider, Response
class QuotesSpider(Spider):
name = "quotes"
start_urls = ["https://quotes.toscrape.com/"]
async def parse(self, response: Response):
for quote in response.css('.quote'):
yield {
"text": quote.css('.text::text').get(),
"author": quote.css('.author::text').get(),
}
# クロールの実行
result = QuotesSpider().start()
print(len(result.items))
# 結果をJSONファイルとして保存
result.items.to_json("quotes.json")
また、クロール処理中にリアルタイムでデータを処理したい場合には、async for item in spider.stream() を利用したストリーミングモードも利用できます。
技術的なポイント
リクエストとブラウザのハイブリッド運用
Scraplingでは、高速性を重視したHTTP通信と、JavaScriptの描画や認証チャレンジの突破を重視したヘッドレスブラウザ通信を共通のインターフェースで扱えます。スパイダー内ではセッションIDを用いてリクエストごとにセッションをルーティングでき、静的なHTMLリクエストと動的なブラウザセッションを柔軟に切り替えられる設計になっています。
開発と運用の負荷を低減する仕組み
クローラーの開発中、対象サーバーに負荷をかけずにパースロジックの修正・テストを行えるよう、初回のレスポンスをローカルディスクにキャッシュして2回目以降に再生する「開発モード」が備わっています。また、運用面ではサイトの応答速度やレートリミット(Retry-After)に応じてクロール遅延を動的に倍加・短縮するAutoThrottle機能があり、サイトに過度な負荷をかけずに巡回を継続できるように設計されています。
リンク抽出と構造化
テンプレートや単体で使用可能な LinkExtractor プリミティブが用意されており、URLの許可・拒否パターン、ドメインフィルタ、CSS/XPathによる探索範囲の絞り込み、拡張子フィルタリング、正規化などを細かく設定できます。これにより、不要なリンクへのリクエストを未然に防ぎながら効率的に巡回ルールを組むことが可能です。
AIエージェントとの親和性
Scraplingは、近年のLLMエージェント需要に応える形でMCP(Model Context Protocol)サーバーやAgent Skillを提供しています。ウェブサイトをクリーンなMarkdownとして抽出する機能と組み合わせることで、LLMをベースにしたAIエージェントにブラウジング能力やデータ取得能力を組み込みやすい構成となっています。
注意点
-
ライセンス
Scraplingのライセンスは「BSD-3-Clause」です。商用・非商用を問わず利用可能ですが、著作権表示および許諾表示の保持が必要です。 -
ボット対策の範囲
READMEによると、Cloudflare TurnstileやInterstitialなどのチャレンジへの対応は備えられていますが、Akamai、DataDome、Kasada、Incapsulaといった高度なエンタープライズ向けアンチボット保護に対しては、外部の専用トークン生成APIやプロキシサービスの活用がスポンサー欄などで言及されています。対象サイトの保護レベルに応じた手段の検討が必要です。 -
利用時のマナーと規約
自動クローリングを行う際は、対象サイトの利用規約やrobots.txt(robots_txt_obeyフラグで対応可能)を確認し、サーバーに過剰な負荷をかけない適切な並行数・遅延設定を行って運用してください。
まとめ
Scraplingは、軽量なリクエストからブラウザ自動化、非同期スパイダー、AI連携までを網羅したPython製スクレイピングフレームワークです。Scrapyライクな記述感とモダンな耐ボット機能やMCP対応を兼ね備えており、現代のウェブ環境に適したデータ収集パイプラインを構築したい開発者にとって有力な選択肢となります。





