D4Vinci/Scrapling
サイトの作りが変わっても、取り出す場所を自力で探し直す
どういうものか
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 サーバとしても動くので、エージェントから呼ぶこともできる。
どんなときに使うか
定期的に回しているスクレイパーが、ある朝だけ黙って空を返すのを減らしたいとき
相手のデザイン変更は予告なく来る。控えた特徴から探し直せれば、気づいて直すまでの空白を埋められる。毎日走らせているもの、他人の運用に組み込んだものほど、この差が大きい。
軽い取得で始めて、駄目なときだけブラウザに寄せたいとき
取得の方法が分かれているので、最初からブラウザを立てる必要がない。動いたページはそのまま安く回して、動かなかったページだけ重い方法に切り替えられる。
注意点
探し直せることは、正しく取れることの保証ではない。 似た要素を当てるので、似た要素が複数あれば別のものを拾う余地がある。取れた値が想定どおりか(数字か、桁は妥当か)を自分の側で確かめる作りにしておいたほうがいい。
検知をかわす機能が入っている。 使う相手の利用規約と 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。商用利用も含めて扱いやすい部類だが、再配布時に著作権表示を残す条件が付く。