Transcript
00:00:00これはPythonスクレイパー「Scrapling」。ウェブスクレイピングの最悪な問題を解決しようとするものです。
00:00:05スクレイパーは今日動いていても、サイトが少し変わった瞬間に壊れてしまいます。クラス名が一つ変わったり、
00:00:10divの位置が一つずれたり、ボット対策が入ったりするだけで、データパイプラインは停止します。Scraplingが掲げるのは、
00:00:17スクレイパーが壊れるのではなく、適応できるようにすることです。GitHubでは53,000以上のスターを獲得しており、
00:00:22適応型パース、ステルスフェッチ、大規模クローラーワークフローをサポートしています。
00:00:27今回、本当に重要な一つの疑問を検証します。
00:00:30セレクタを書き直さずにウェブサイトの変更を乗り越えられるのか?これから確かめてみましょう。
00:00:40では、Scraplingとは何か?これは適応型のオールインワンPythonウェブスクレイピングフレームワークです。
00:00:46自己修復型のパーサー、ステルスフェッチャー、JavaScriptが必要な場合のブラウザベースの取得機能、
00:00:51大規模なクロールのためのスパイダーフレームワークが使えます。インストールは一度、APIも一つ。つまり、
00:00:57壊れるスクレイパーを減らし、より確実にデータを取得できるということです。それでは、核心部分を見ていきましょう。
00:01:03ワークフローを高速化するコーディングツールが好きなら、ぜひチャンネル登録してください。動画を定期的に公開しています。
00:01:08さて、ここに基本的なセットアップがあります。Scraplingはすでにインストール済みなので、この部分はサクサク進めます。
00:01:13インポートと呼び出し一つでページを取得できます。上部には、変化するHTMLを作成しました。
00:01:21一つは一般的な初期状態のサイト。もう一つは、中身は同じですがCSSセレクタを変更したものです。
00:01:27例えば、製品名と価格を取得したいとします。通常ならCSSセレクタを使って取得するでしょう。
00:01:34ページCSSにセレクタを入力し、auto-saveをtrueにします。これで
00:01:40正常に動作し、データが辞書形式で返ってきます。見た目は普通です。2つのセレクタと辞書、
00:01:46これで完了。でも同時に、これこそが問題なのです。普通のスクレイパーは、ページが変わるまでは完璧に動くからです。
00:01:52もしサイトが夜間に突然変更されたらどうでしょう?リデザインされたり、
00:01:58スクレイピングを防ぐ対策がされたりすると、製品タイトルが「item heading」になったり、製品価格が「pricing value」になったりします。
00:02:04ページ内のデータは同じでも、DOM構造全体が変わってしまいます。以前のセレクタは
00:02:11もう使えません。ほとんどのスクレイパーはここで壊れます。ですが、ここで「適応モード」をオンにします。
00:02:18autosaveをtrueからadaptiveをtrueに変えるだけ。これで製品タイトルを取得する際、
00:02:26adaptiveをtrueに設定すれば、セレクタを書き直さなくても、ページ構造が違っても同じデータを取得できます。
00:02:34これが核となる考え方です。autosaveをtrueにして要素をスクレイピングすると、
00:02:40Scraplingはその要素の手がかりを記録します。タグや属性、
00:02:44親要素や子要素、隣接するテキスト、DOM上の位置、構造的な形状などを記録します。だから、
00:02:50クラス名が変わっても、Scraplingには手がかりが残っているのです。サイトのすべてが同じである必要はありません。
00:02:56要素を再認識するために十分な構造的シグナルさえあればいいのです。これこそが
00:03:01重要な部分です。現実のスクレイパーの失敗は、サイトの全面リニューアルなどではありません。クラス名の変更や、
00:03:06新しいラッパー、レイアウトの微調整といった些細なことです。適応型マッチングはまさにそのために作られました。
00:03:13Scraplingには重要な3つの機能があります。一つ目は今見た適応型パーサー。
00:03:18二つ目はマルチフェッチャー。一つのワークフローで最適なツールを使い分けます。単純なページには、
00:03:25高速なHTTPフェッチャー。ボット対策が必要な時はステルスフェッチャー。JavaScript多用のサイトには動的フェッチャー(ブラウザ)を使います。
00:03:32APIは一つ、フェッチャーを切り替えるだけでコードはそのまま。三つ目は小規模なスクリプトを
00:03:39本格的なクローラーに変えるスパイダーフレームワーク。非同期クローリング、一時停止と再開、プロキシローテーション、ストリーミング、
00:03:46混合セッションなど、通常は後から追加する機能が最初から備わっています。Scraplingは単なる
00:03:53パーサーではありません。requests、BeautifulSoup、playwright、リトライロジック、プロキシヘルパー、
00:04:00スパイダーコードを一つのワークフローに置き換えるものです。BeautifulSoupが不要だとか、
00:04:06playwrightやScrapyが死んだと言っているわけではありません。BeautifulSoupとrequestsは単純なページには今でも最高です。簡単で、
00:04:13誰にでも理解できます。ですが、ステルス機能はなく、
00:04:20適応型セレクタもなく、JavaScriptもレンダリングしません。大規模なパース作業では、
00:04:26ボトルネックになる可能性があります。Scrapyは強力です。本気で
00:04:31クローリングインフラを構築するならScrapyは敬意に値しますが、設定やパイプライン、ミドルウェア、
00:04:36拡張機能など、多くの準備が必要です。PlaywrightとSeleniumはブラウザが必要な時には素晴らしいですが、
00:04:42ページがJavaScriptを必要とするなら避けては通れません。ですがブラウザは重く、
00:04:48生のHTTPより遅く、メモリも消費します。それに、壊れたセレクタの問題も解決してくれません。
00:04:54彼らはページを実行するだけで、何を抽出しようとしているのか理解しません。Scraplingなら、
00:05:01高速取得、ステルス取得、ブラウザレンダリングを必要に応じて使い分け、適応型パースを利用できます。
00:05:06requires it and use adaptive parsing. So one small front and change doesn't blow everything up. Now, all this
00:05:12高度なデータ保護、洗練されたフィンガープリント、非常に厳しいレート制限などがある場合、
00:05:17優れたプロキシが依然として必要になるでしょう。Scraplingは助けになりますが、
00:05:23透明人間にはなれません。動的フェッチにはブラウザの追加設定が必要になることもあります。これは
00:05:29JavaScriptレンダリングを伴う場合のトレードオフです。参考にしてください。
00:05:34Scraplingは、データパイプラインを構築したり、RAGジョブ、AIエージェントなど、
00:05:41ターゲットサイトが変更された後も動き続ける必要がある場合に試す価値があります。
00:05:47これを使う最大の理由は、スクレイピングを可能にするからではありません。それは他のツールでもできます。
00:05:53最大の理由は、メンテナンスが減るからです。ごく小さなスクリプトなら、
00:05:59requestsとBeautifulSoupだけで十分でしょう。そうですね、
00:06:04こういったツールを作るのが好きなら、BetterStackチャンネルをぜひ登録してください。次の動画でお会いしましょう。
Community Posts
No posts yet. Be the first to write about this video!
Write about this video