Ikeraq

D4Vinci/Scrapling

サイトの作りが変わっても、取り出す場所を自力で探し直す

BSD-3-Clause · 商用可 Python ★ 88,487 (今日 +193) 今日 更新
GitHub で見る D4Vinci/Scrapling
GitHub の説明(原文)
🕷️ A Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev

どういうものか

Scrapling は Python のスクレイピング一式。ページを取ってくる部分、HTML から値を抜く部分、リンクをたどって巡回する部分が、ひとつの中に入っている。説明文にある「適応(adaptive)」が指しているのは、サイトの作りが変わって指定が外れたときに、要素を探し直す仕組みのことだ。

普通のスクレイパーは、div.price のような場所の指定で値を取る。だから相手がデザインを直してクラス名が変わった途端、何も取れなくなる。しかも多くの場合、例外ではなく「空っぽ」で返るので、壊れたことにしばらく気づかない。Scrapling には、値を取るときにその要素の特徴を控えておく指定がある。次に走らせて指定が空振りしたときは、控えた特徴に似た要素をページ全体から探し当てる。README はこれを「intelligent similarity algorithms」と呼んでいる。どちらも既定で動くわけではない。取得する側で adaptive を有効にしたうえで、控えるとき(auto_save)と探し直すとき(adaptive)にそれぞれ指定する形になっている。

取得の口は、用途で3通りに分けてある(非同期版とセッション版が別にある)。HTTP で取る Fetcher(TLSの指紋をまねる、HTTP/3 を使うといった細工も込み)、検知をかわす方向に振った StealthyFetcher(README は Cloudflare Turnstile への対応を挙げている)、Playwright で実際のブラウザを動かす DynamicFetcher。軽い方法で済むページはそのまま回し、駄目なページだけ重い方に回す、という組み方ができる。巡回のほうは Scrapy に似た Spider の形で、相手の応答の速さを見て1ドメインごとの間隔を自動で調整する仕組み(AutoThrottle)、途中で止めて再開するための記録、robots.txt に従わせる指定(任意)が入っている。組み込みの書き出しは JSON / JSONL / CSV / XML。MCP サーバとしても動くので、エージェントから呼ぶこともできる。

指定が外れたら、似ている要素を探し直す 1回目 (取れている状態) div.price から取る 同時に、その要素の 特徴を控えておく ※ 控える指定が要る サイトが変わる (相手の都合・予告なし) div.price ↓ div.cost 普通はここで空になる 空振り 2回目 (探し直す) 控えた特徴に 似た要素をページ全体から 見つけて取り直す セレクタは同じまま(※ 探し直す指定が要る) 止まるのではなく「空のまま動き続ける」のが、スクレイパーのいちばん厄介な壊れ方
手を入れる回数を減らす道具、というより、壊れたことに気づかないまま空のデータが溜まる状態を減らす道具。定期実行しているものほど効く。

どんなときに使うか

定期的に回しているスクレイパーが、ある朝だけ黙って空を返すのを減らしたいとき

相手のデザイン変更は予告なく来る。控えた特徴から探し直せれば、気づいて直すまでの空白を埋められる。毎日走らせているもの、他人の運用に組み込んだものほど、この差が大きい。

軽い取得で始めて、駄目なときだけブラウザに寄せたいとき

取得の方法が分かれているので、最初からブラウザを立てる必要がない。動いたページはそのまま安く回して、動かなかったページだけ重い方法に切り替えられる。

注意点

探し直せることは、正しく取れることの保証ではない。 似た要素を当てるので、似た要素が複数あれば別のものを拾う余地がある。取れた値が想定どおりか(数字か、桁は妥当か)を自分の側で確かめる作りにしておいたほうがいい。

検知をかわす機能が入っている。 使う相手の利用規約と robots.txt の確認は使う側の責任になる。README 自身も、教育・研究目的であること、サイトの規約と robots.txt を尊重することを明記している。

用途ごとに追加のインストールが要る。 pip install scrapling だけだと解析部分しか入らず、取得と巡回の部分(scrapling.fetchers と scrapling.spiders)を import すると ModuleNotFoundError になる。取得と巡回を使うなら pip install "scrapling[fetchers]"(README は spiders もこれで足りると書いている) に加えて scrapling install でブラウザ側を入れる。売りに挙げた MCP サーバはさらに別で、pip install "scrapling[ai]" が要る。README によれば Python 3.10 以上が要る。

ライセンスは BSD-3-Clause。商用利用も含めて扱いやすい部類だが、再配布時に著作権表示を残す条件が付く。

開発の様子

2.0 年
公開してからの期間。2024-10-14 が最初のコミットです
53 回
リリースの回数です
32 人
開発に参加した人数です
0 日前
最後のコミットです
6 件
未解決の Issue とプルリクエストの合計です(GitHub はこの2つを同じ数に含めます)

ほかの候補

firecrawl/firecrawl
「取れなかった」で終わるページを取り切って、そのまま読める形で返す
jo-inc/camofox-browser
エージェントに本物のブラウザを渡し、ページを番号付きの骨組みにして返す
browser-use/browser-use
人と同じようにブラウザを触らせて、Web上の手作業をAIに任せる
X で共有 この記事がよかったら

この記事の更新日は 2026-09-13 です。 内容は公開されている README と GitHub のデータに基づいています。 数値は GitHub から取得したもの、警告は判定の基準にある条件での自動判定です。事実誤認を見つけた場合はお知らせください。