Webスクレイピングの仕組み


Webスクレイピングの流れ Webサイト <html> <div>...</div> </html> HTTP リクエスト スクレイパー HTMLパース データ抽出 構造化 データ データベース / CSV id, name, price 1, "AAA", 500 スクレイピング時の注意点 robots.txt 許可 ルールに従い安全に取得 アクセス拒否・規約違反 ブロックや法的リスクあり vs
Webスクレイピングの流れと注意点
ひよこ ひよこ

Webスクレイピングってよく聞くけど、何をするものなの?

ペンギン先生 ペンギン先生

簡単に言うと、Webサイトのページを自動で読み取って、欲しいデータだけを抜き出す技術だよ。たとえば価格比較サイトは、いろんなECサイトの商品価格をスクレイピングで集めて一覧にしてるんだ。研究者がSNSの投稿を分析したり、不動産サイトの物件情報をまとめたりするのにも使われてるね。

ひよこ ひよこ

へえ!でも具体的にはどうやってデータを取ってるの?人がブラウザで見るのと何が違うの?

ペンギン先生 ペンギン先生

仕組みとしては3ステップだよ。まず、プログラムHTTPリクエストを送ってWebページのHTMLを取得する。次に、そのHTMLを解析(パース)して構造を理解する。最後に、欲しい部分だけを抜き出して保存する。人がブラウザで見るときも裏ではHTMLを受信してるんだけど、スクレイピングはそれをプログラムが自動でやるイメージだね。

ひよこ ひよこ

HTMLを解析するって、どうやって「ここが商品名」「ここが価格」って見分けるの?

ペンギン先生 ペンギン先生

CSSセレクタやXPathという仕組みを使うんだ。HTMLは<div class="price">1,980円</div>みたいにタグとクラス名で構造化されてるから、「classがpriceの要素のテキストを取得」と指定すればピンポイントで抜き出せる。Pythonだと Beautiful Soup というライブラリが有名で、数行のコードでHTML解析ができるよ。

ひよこ ひよこ

でも最近のWebサイトって、JavaScriptで後から表示される部分も多いよね?それも取れるの?

ペンギン先生 ペンギン先生

いい質問だね。普通のHTTPリクエストだとJavaScriptは実行されないから、動的に生成される部分は取得できないんだ。そこで登場するのがヘッドレスブラウザ。PuppeteerやPlaywrightといったツールを使うと、画面を表示しない状態で本物のブラウザを動かせる。JavaScriptが実行された後のDOMを取得できるから、SPAのようなサイトでもスクレイピングできるよ。

ひよこ ひよこ

なるほど!でもスクレイピングされる側は困らないの?対策とかあるのかな。

ペンギン先生 ペンギン先生

もちろんあるよ。まずレートリミットで、短時間に大量のアクセスが来たらブロックする。CAPTCHAを挟んで人間かボットかを判定したり、User-Agentヘッダーを見て怪しいアクセスを弾いたりもする。他にもIPアドレスの制限、ハニーポット(ダミーリンク)を仕込んでボットを検出する手法もあるんだ。

ひよこ ひよこ

そもそもスクレイピングって法律的に大丈夫なの?勝手にやっていいの?

ペンギン先生 ペンギン先生

ここが一番大事なポイントだね。まず robots.txt というファイルがほぼ全てのサイトに置いてあって、「このページはクロールしないでね」というルールが書かれている。法律面では、日本の著作権法ではデータ分析目的の複製は一定条件下で許されているけど、利用規約で禁止しているサービスも多い。個人情報を大量に収集すると個人情報保護法に抵触する可能性もあるから、事前にルールを確認することが必須だよ。

ひよこ ひよこ

robots.txt を守らなかったらどうなるの?

ペンギン先生 ペンギン先生

robots.txt 自体に法的強制力はないんだけど、無視すると不正アクセスや業務妨害として訴えられるリスクがあるよ。サーバーに過剰な負荷をかけた場合は威力業務妨害にもなり得る。マナーとしても、アクセス間隔を空ける、サーバーに負荷をかけない、取得データの再配布に注意する、というのが鉄則だね。

ひよこ ひよこ

そういえば、最初からAPIでデータを取ればいいんじゃないの?スクレイピングとAPIってどう使い分けるの?

ペンギン先生 ペンギン先生

APIが用意されているなら、断然APIを使うべきだよ。APIは提供者が公式に用意したデータ取得の窓口だから、構造化されたデータが安定して取れるし、利用規約もはっきりしている。スクレイピングはAPIがない場合や、APIでは取得できないデータが必要なときの最終手段と考えた方がいいね。ただ、APIにはレート制限や有料プランの壁があることもあるから、要件に応じて判断するんだ。

ひよこ ひよこ

スクレイピングが裁判になったケースもあるって聞いたんだけど、本当?

ペンギン先生 ペンギン先生

有名なのはアメリカのLinkedIn対hiQ Labs事件だね。hiQ Labsはリンクトインの公開プロフィールをスクレイピングして人材分析サービスを提供していたんだけど、LinkedIn側がアクセスをブロックしたんだ。裁判では「公開情報のスクレイピングはコンピュータ詐欺・不正利用防止法に違反しない」という判断が出て、hiQ Labs側が勝訴した。ただし2022年の最高裁差し戻し後も争いは続いていて、完全に決着がついたわけではない。この判例はスクレイピングの法的グレーゾーンを象徴しているよ。

ひよこ ひよこ

じゃあスクレイピングは完全にOKとも完全にNGとも言えないんだね。

ペンギン先生 ペンギン先生

その通り。最近はAI企業が学習データのためにWeb上のコンテンツを大規模にスクレイピングしていることも議論になっていて、著作権やフェアユースの観点でさらに複雑になってきている。技術的にはできることと、やっていいことは別問題だから、robots.txt の確認、利用規約の遵守、サーバーへの配慮、この3つを常に意識するのがエンジニアとしての基本姿勢だね。