🚀 Scrapling
簡単で楽なウェブスクレイピングを実現!
Scraplingは、ウェブサイトの変更に適応し、自動的に要素を再配置することで、スクレイピングを継続できる、初めての適応型スクレイピングライブラリです。他のライブラリがウェブサイトの構造変更で機能しなくなるのに対し、Scraplingは自動的に要素を再配置し、スクレイパーを稼働させ続けます。
選択メソッド
·
フェッチャーの選択
·
CLI
·
MCPモード
·
Beautifulsoupからの移行
🚀 クイックスタート
>> from scrapling.fetchers import Fetcher, AsyncFetcher, StealthyFetcher, DynamicFetcher
>> StealthyFetcher.adaptive = True
>> page = StealthyFetcher.fetch('https://example.com', headless=True, network_idle=True)
>> print(page.status)
200
>> products = page.css('.product', auto_save=True)
>>
>> products = page.css('.product', adaptive=True)
✨ 主な機能
セッションサポート付きの高度なウェブサイトフェッチ
- HTTPリクエスト:
Fetcherクラスを使用した高速で目立たないHTTPリクエスト。ブラウザのTLSフィンガープリント、ヘッダーを模倣でき、HTTP3を使用できます。
- 動的ローディング:
DynamicFetcherクラスを介して、PlaywrightのChromium、実際のChrome、およびカスタムステルスモードをサポートする完全なブラウザ自動化で動的ウェブサイトを取得します。
- アンチボット回避:修正版のFirefoxとフィンガープリントスプーフィングを使用した
StealthyFetcherによる高度なステルス機能。自動化でCloudflareのTurnstileのすべてのレベルを簡単に回避できます。
- セッション管理:
FetcherSession、StealthySession、およびDynamicSessionクラスによる永続的なセッションサポート。リクエスト間でクッキーと状態を管理します。
- 非同期サポート:すべてのフェッチャーで完全な非同期サポートと専用の非同期セッションクラスが提供されます。
適応型スクレイピングとAI統合
- 🔄 スマート要素追跡:インテリジェントな類似性アルゴリズムを使用して、ウェブサイトの変更後に要素を再配置します。
- 🎯 スマート柔軟選択:CSSセレクター、XPathセレクター、フィルターベースの検索、テキスト検索、正規表現検索など。
- 🔍 類似要素の検索:見つかった要素に類似する要素を自動的に見つけます。
- 🤖 AIと共に使用するMCPサーバー:AI支援のウェブスクレイピングとデータ抽出のための組み込みMCPサーバー。MCPサーバーは、Scraplingを利用してターゲットコンテンツを抽出し、それをAI(Claude/Cursorなど)に渡す前に、カスタムで強力な機能を備えています。これにより、操作が高速化され、トークンの使用量が最小限に抑えられ、コストが削減されます。(デモビデオ)
高性能で実績のあるアーキテクチャ
- 🚀 超高速:ほとんどのPythonスクレイピングライブラリを上回る最適化されたパフォーマンス。
- 🔋 メモリ効率:最小限のメモリ使用量のための最適化されたデータ構造と遅延ローディング。
- ⚡ 高速JSONシリアル化:標準ライブラリよりも10倍高速。
- 🏗️ 実績あり:Scraplingは92%のテストカバレッジと完全な型ヒントカバレッジを持ち、過去1年間に数百人のウェブスクレイパーによって毎日使用されています。
開発者/ウェブスクレイパーに優しい体験
- 🎯 インタラクティブなウェブスクレイピングシェル:Scrapling統合、ショートカット、および新しいツールを備えたオプションの組み込みIPythonシェル。ウェブスクレイピングスクリプトの開発を高速化します。例えば、curlリクエストをScraplingリクエストに変換し、ブラウザでリクエスト結果を表示します。
- 🚀 ターミナルから直接使用:オプションで、コードを1行も書かずにScraplingを使用してURLをスクレイピングできます!
- 🛠️ 豊富なナビゲーションAPI:親、兄弟、子のナビゲーションメソッドを備えた高度なDOMトラバーサル。
- 🧬 強化されたテキスト処理:組み込みの正規表現、クリーニングメソッド、および最適化された文字列操作。
- 📝 自動セレクター生成:任意の要素に対して堅牢なCSS/XPathセレクターを生成します。
- 🔌 馴染みのあるAPI:Scrapy/BeautifulSoupと同様のAPIで、Scrapy/Parselで使用されるのと同じ疑似要素を使用します。
- 📘 完全な型カバレッジ:優れたIDEサポートとコード補完のための完全な型ヒント。
新しいセッションアーキテクチャ
Scrapling 0.3では、完全に見直されたセッションシステムが導入されました。
- 永続的なセッション:複数のリクエスト間でクッキー、ヘッダー、および認証を維持します。
- 自動セッション管理:適切なクリーンアップを伴うスマートなセッションライフサイクル管理。
- セッション継承:すべてのフェッチャーは、ワンオフリクエストと永続的なセッションの両方の使用をサポートします。
- 同時セッションサポート:複数の分離されたセッションを同時に実行します。
📦 インストール
ScraplingはPython 3.10以上が必要です。
pip install scrapling
v0.3.2から、このインストールにはパーサーエンジンとその依存関係のみが含まれ、フェッチャーやコマンドライン依存関係は含まれません。
オプションの依存関係
-
以下の追加機能、フェッチャー、またはそれらのクラスを使用する場合は、フェッチャーの依存関係をインストールし、その後ブラウザの依存関係をインストールする必要があります。
pip install "scrapling[fetchers]"
scrapling install
これにより、すべてのブラウザとそのシステム依存関係およびフィンガープリント操作依存関係がダウンロードされます。
-
追加機能:
- MCPサーバー機能をインストールするには:
pip install "scrapling[ai]"
- シェル機能(ウェブスクレイピングシェルと
extractコマンド)をインストールするには:pip install "scrapling[shell]"
- すべてをインストールするには:
pip install "scrapling[all]"
これらの追加機能のいずれかをインストールした後(まだインストールしていない場合)、scrapling installでブラウザの依存関係をインストールすることを忘れないでください。
💻 使用例
基本的な使用法
from scrapling.fetchers import Fetcher, StealthyFetcher, DynamicFetcher
from scrapling.fetchers import FetcherSession, StealthySession, DynamicSession
with FetcherSession(impersonate='chrome') as session:
page = session.get('https://quotes.toscrape.com/', stealthy_headers=True)
quotes = page.css('.quote .text::text')
page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote .text::text')
with StealthySession(headless=True, solve_cloudflare=True) as session:
page = session.fetch('https://nopecha.com/demo/cloudflare', google_search=False)
data = page.css('#padded_content a')
page = StealthyFetcher.fetch('https://nopecha.com/demo/cloudflare')
data = page.css('#padded_content a')
with DynamicSession(headless=True, disable_resources=False, network_idle=True) as session:
page = session.fetch('https://quotes.toscrape.com/', load_dom=False)
data = page.xpath('//span[@class="text"]/text()')
page = DynamicFetcher.fetch('https://quotes.toscrape.com/')
data = page.css('.quote .text::text')
高度なパーシングとナビゲーション
from scrapling.fetchers import Fetcher
page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote')
quotes = page.xpath('//div[@class="quote"]')
quotes = page.find_all('div', {'class': 'quote'})
quotes = page.find_all('div', class_='quote')
quotes = page.find_all(['div'], class_='quote')
quotes = page.find_all(class_='quote')
quotes = page.find_by_text('quote', tag='div')
first_quote = page.css_first('.quote')
quote_text = first_quote.css('.text::text')
quote_text = page.css('.quote').css_first('.text::text')
quote_text = page.css_first('.quote .text').text
author = first_quote.next_sibling.css('.author::text')
parent_container = first_quote.parent
similar_elements = first_quote.find_similar()
below_elements = first_quote.below_elements()
ウェブサイトを取得したくない場合は、以下のようにパーサーをすぐに使用できます。
from scrapling.parser import Selector
page = Selector("<html>...</html>")
そして、まったく同じように動作します!
非同期セッション管理の例
import asyncio
from scrapling.fetchers import FetcherSession, AsyncStealthySession, AsyncDynamicSession
async with FetcherSession(http3=True) as session:
page1 = session.get('https://quotes.toscrape.com/')
page2 = session.get('https://quotes.toscrape.com/', impersonate='firefox135')
async with AsyncStealthySession(max_pages=2) as session:
tasks = []
urls = ['https://example.com/page1', 'https://example.com/page2']
for url in urls:
task = session.fetch(url)
tasks.append(task)
print(session.get_pool_stats())
results = await asyncio.gather(*tasks)
print(session.get_pool_stats())
📚 ドキュメント
Scrapling v0.3には強力なコマンドラインインターフェイスが含まれています。

scrapling shell
scrapling extract get 'https://example.com' content.md
scrapling extract get 'https://example.com' content.txt --css-selector '#fromSkipToProducts' --impersonate 'chrome'
scrapling extract fetch 'https://example.com' content.md --css-selector '#fromSkipToProducts' --no-headless
scrapling extract stealthy-fetch 'https://nopecha.com/demo/cloudflare' captchas.html --css-selector '#padded_content a' --solve-cloudflare
⚠️ 重要提示
MCPサーバーやインタラクティブなウェブスクレイピングシェルなど、多くの追加機能がありますが、このページを短く保つために省略しています。詳細なドキュメントはこちらをご覧ください。
🔧 技術詳細
テキスト抽出速度テスト(5000個のネストされた要素)
| # |
ライブラリ |
時間 (ms) |
Scraplingとの比較 |
| 1 |
Scrapling |
1.92 |
1.0x |
| 2 |
Parsel/Scrapy |
1.99 |
1.036x |
| 3 |
Raw Lxml |
2.33 |
1.214x |
| 4 |
PyQuery |
20.61 |
~11x |
| 5 |
Selectolax |
80.65 |
~42x |
| 6 |
BS4 with Lxml |
1283.21 |
~698x |
| 7 |
MechanicalSoup |
1304.57 |
~679x |
| 8 |
BS4 with html5lib |
3331.96 |
~1735x |
要素類似性とテキスト検索パフォーマンス
Scraplingの適応型要素検索機能は、他のライブラリを大幅に上回ります。
| ライブラリ |
時間 (ms) |
Scraplingとの比較 |
| Scrapling |
1.87 |
1.0x |
| AutoScraper |
10.24 |
5.476x |
すべてのベンチマークは100回以上の実行の平均を表しています。方法論についてはbenchmarks.pyを参照してください。
📄 ライセンス
この作品はBSD-3条項ライセンスの下でライセンスされています。
謝辞
このプロジェクトには、以下のコードが適応されています。
参考
❤️によってデザインされ、作られました。Karim Shoair.