mcpField
S
scrapling

scrapling

github.com/saenidevデータ・データベース136 回インストール36 週間前に更新
リポジトリ

scrapling について

Scrapling は、開発者や AI エージェント向けの Python ウェブスクレイピングライブラリです。静的ページ、JavaScript ページ、保護されたページに対応し、ページ構造が変わっても要素を再特定するアダプティブセレクターを備えています。クローリングフレームワーク、コマンドラインツール、MCP にも対応します。

主な機能

  1. 01HTTP とブラウザーによる取得
  2. 02ページ変更に適応するセレクター
  3. 03非同期 Spider クローリングフレームワーク
  4. 04プロキシローテーションとステルス取得
  5. 05コマンドライン抽出と対話型シェル

活用シーン

  1. 01静的ページや JavaScript ページからのデータ抽出
  2. 02ページ構造の変更後もスクレイピングを継続
  3. 03Spider による複数ページのクロール
  4. 04AI エージェントへのスクレイピングツール提供

MCP 対応

MCP サーバーは、通常取得、ブラウザー取得、ステルス取得の単発・一括ツールを公開します。AI エージェントは自然言語のワークフローからこれらを使ってスクレイピングできます。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/saenidev/scrapling-skill --skill scrapling

インストール後、Claude Code で/scraplingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
adaptive.md
cli.md
fetchers.md
mcp.md
selectors.md
spiders.md
scripts/
scrape_list.py

詳細

Scrapling

適応型で高性能な Python ウェブスクレイピングライブラリです。BeautifulSoup より774倍高速です。ウェブサイトの構造が変わっても、要素を自動的に再配置します。

主な機能: HTTP/ブラウザーによるフェッチ、Cloudflare のバイパス、適応型セレクター、Spider クロールフレームワーク、プロキシローテーション、CLI ツール、AI エージェント向け MCP サーバー。

v0.4 の破壊的変更: css_first()/xpath_first() は削除されました。代わりに .css('.sel').first または .css('.sel').get() を使用してください。css('::text') と css('::attr()') は TextHandler ではなく、Selector オブジェクトを返すようになりました。Response.body は常に bytes です。

クイックスタート

from scrapling.fetchers import Fetcher

page = Fetcher.get('https://example.com')
titles = page.css('.title::text')
links = page.css('a.link::attr(href)').getall()

# Response metadata
print(page.status, page.headers, page.cookies)
グローバル設定
Fetcher.configure(adaptive=True, encoding="utf-8", keep_comments=False)

フェッチャーの選択

必要なもの使用するもの理由
静的 HTMLFetcher最速、TLS スプーフィング
JavaScript コンテンツDynamicFetcherPlaywright ブラウザー
Cloudflare/ボット対策StealthyFetcherCamoufox + ステルス機能
複数ページのクロールSpider非同期クロールフレームワーク

フェッチャーのオプションについて詳しくは、references/fetchers.md を参照してください。

よく使うパターン

基本的なスクレイピング
from scrapling.fetchers import Fetcher

page = Fetcher.get('https://quotes.example.com')

for quote in page.css('.quote'):
    text = quote.css('.text').first.text
    author = quote.css('.author').first.text
    print(f'{text} - {author}')
JavaScript でレンダリングされたコンテンツ
from scrapling.fetchers import DynamicFetcher

page = DynamicFetcher.fetch(
    'https://spa-app.com',
    headless=True,
    network_idle=True,
    wait_selector='.content-loaded'
)
Cloudflare のバイパス
from scrapling.fetchers import StealthyFetcher

page = StealthyFetcher.fetch(
    'https://protected-site.com',
    solve_cloudflare=True,
    humanize=True,
    headless=True
)
Cookie を使ったセッション
from scrapling.fetchers import FetcherSession

with FetcherSession(impersonate='chrome') as session:
    session.get('https://site.com/login')
    dashboard = session.get('https://site.com/dashboard')
複数ページのクロール(Spider)
from scrapling.spiders import Spider, Response

class MySpider(Spider):
    name = "demo"
    start_urls = ["https://example.com/"]

    async def parse(self, response: Response):
        for item in response.css('.product'):
            yield {"title": item.css('h2::text').get()}

MySpider().start()

Spider フレームワークの詳細については、references/spiders.md を参照してください。

プロキシローテーション
from scrapling.engines.toolbelt import ProxyRotator

rotator = ProxyRotator(["http://proxy1:8080", "http://proxy2:8080"])
page = Fetcher.get('https://example.com', proxy_rotator=rotator)
適応型セレクター(自己修復)
from scrapling import Selector

# Save element properties on first visit (storage defaults to SQLite)
selector = Selector(html, url='https://example.com', adaptive=True)
products = selector.css('.product-card', auto_save=True)

# On subsequent runs, relocate even if structure changed
products = selector.css('.product-card', adaptive=True)

要素の選択

# CSS (recommended)
page.css('.class')              # Multiple → Selectors list
page.css('.class').first        # Single (safe, returns None if missing)
page.css('.class').get()        # First as TextHandler (alias: extract_first)
page.css('.title::text')        # Text extraction → Selector objects
page.css('a::attr(href)')       # Attribute → Selector objects

# XPath
page.xpath('//div[@id="main"]')
page.xpath('//h1').first

# BeautifulSoup-style
page.find('div', class_='content')
page.find_all('a', attrs={'data-type': 'link'})

# Text search (no tag= param — filter by tag separately if needed)
page.find_by_text('Add to Cart')
page.css('button').filter(lambda el: el.text == 'Add to Cart').first

注: .first と .last は安全なアクセサーです。IndexError を発生させず、代わりに None を返します。

ナビゲーションと高度な選択については、references/selectors.md を参照してください。

要素のナビゲーション

el = page.css('.target').first
el.parent                # Parent element
el.children              # Child elements
el.next                  # Next sibling
el.previous              # Previous sibling
el.siblings              # All siblings
el.text                  # Inner text
el.text.clean()          # Whitespace-normalized text
el.attrib['href']        # Attribute access

既存の HTML を解析する

from scrapling.parser import Selector

html = '<div class="item">Content</div>'
page = Selector(html)
content = page.css('.item').first.text

CLI の使用方法

# Interactive shell
scrapling shell

# Extract from URL (output format by extension: .html, .md, .txt)
scrapling extract get 'https://example.com' output.md --css-selector '.content'

# Dynamic content with browser
scrapling extract fetch 'https://spa.com' out.html --network-idle

# Cloudflare bypass
scrapling extract stealthy-fetch 'https://site.com' out.html --solve-cloudflare

すべてのコマンドとオプションについては、references/cli.md を参照してください。

エラー処理

from scrapling.fetchers import Fetcher

try:
    page = Fetcher.get('https://example.com', timeout=10)  # seconds
    element = page.css('.target').first
    if element:
        print(element.text)
    else:
        print('Element not found')
except Exception as e:
    print(f'Request failed: {e}')

MCP サーバー(AI 連携)

AI エージェント(Claude Desktop/Code)が自然言語でスクレイピングできるようにします。

pip install "scrapling[ai]"
scrapling install

ツール:get、bulk_get、fetch、bulk_fetch、stealthy_fetch、bulk_stealthy_fetch

設定については、references/mcp.md を参照してください。

リソース

コメント