WEBデータ収集とスクレイピング Puppeteerを用いたスクレイピングとの違い
C-limber(クライマー)株式会社 エンジニアの柿添です。
師走も半ばを過ぎ、なにかと気ぜわしくなってまいりました。気温がだんだんと下がり冬の強さが増しては来ましたがまだまだ暖かいと感じます。
この時期は戦いの時期ですね、多くの友人と集まる機会があった学生の頃がとても懐かしいです。
師走を無事乗り切るため、仕事に励みたいと思います。
WEBでデータ収集
「WEB上のデータを収集したい」
データ分析手法の増加・AIの進歩により、そのような要望はたくさんのシーンで考えられるようになってきたかと思います。
- 研究のためにたくさんのデータが必要だ
- 分析のためにまずは大量のデータ収集が必要だが手元にないためWEB上で収集したい
- 競合調査がしたいためWEB上のデータを取集したい
- マーケティング調査をしたいのでWEB上の情報を収集したい
- クチコミ情報を収集して自社業務の改善に活かしたい
何をするにもまずはデータがないことには話になりません。
自身でデータを十分に持っていない場合にはデータの収集が必要になってきます。
実際にデータを収集する場合は…
検索エンジンでキーワードを入力し検索
↓
該当するデータをコピー
↓
Googleスプレッドシート へ ペースト
単純に人の手で集めることもできるかと思いますが、
自動化できる部分は自動化し、単純作業にかける時間は少しでも減らしたいところです。
データ収集におけるスクレイピングとはなにか
スクレイピング(WEBスクレイピング)とは、
WEB上から情報を抽出するコンピュータソフトウェア技術やそのデータ収集法のことで、
データを収集し余分な情報を削りとり利用しやすく加工することを指します。
WEBスクレイピングはWEB上を対象としており、エンジニアが
「スクレイピング」
と言うとWEBスクレイピングを指しているケースが大半です。
メリットは様々有りますが、以下のようなものが挙げられるかと思います。
- 業務の効率化・自動化
- 手元にないデータを自動収集
- 統一されたフォーマット利用しやすいデータへ加工
- APIで入手できない情報を収集
APIに関しては後述します。
スクレイピングとクローリングの違い
- クローリング: 巡回
- スクレイピング: 抽出
と捉えるとわかりやすいかと思います。
Googleのクローラーなどは検索エンジンのサイト情報を収集するために世界中のWEBサイトを「巡回」しています。
サーバのログやCloudFrontのログなどを眺めていると、「世界中でたくさんのクローラーが日々頑張って動いているな」と感じます。
※ Web上を巡回するシステムやプログラムは “ボット”, “クローラー”, “スパイダー” などと呼ばれます
スクレイピングとAPIの違い
- API: 提供を想定されたデータの収集
- スクレイピング: 提供を想定されていないデータやAPI未提供のデータ収集とその加工
API(Application Programming Interfaceは)は
「アプリケーション、ソフトウェア」と「プラグラム」をつないだり、
「サービスのシステム」と「自社のシステム」を繋ぎます。
APIでは外部とやりとりする窓口を作り、外部とコミュニケーションや連携ができる状態にされているため
収集のための窓口は既にありデータの確保は容易です。
* APIがそもそも公開されていない
* APIでは入手できない情報がある
* APIで入手できるデータが使いづらい
といったケースはさまざま有ります。
その場合にスクレイピングが力を発揮します。
スクレイピングの活用例
研究のためのデータ収集
画像データや文章のデータ、自身の研究に必要ではあるが手元にはないデータは一定のルールに基づき自動収集させることができます。溜まったデータの格納場所や格納方法、データの加工まで自動で行い、手元にはすぐに使えるデータがある状態にすることができます。
空室・空席情報の収集
旅行系サイトのホテルの空室情報や交通機関予約の空席情報など自身で利用しやすいデータに加工し収集することが可能です。対象が複数ある場合でもまとめて加工を行い統一されたフォーマットでデータを持つことが可能です。
クチコミやレビューを自動収集して分析
飲食店であればレビューサイトのお客様を定期的に自動収集し、日付とレビュー内容から改善点を分析することができます。
多数のECモールへ商品を出している場合、クチコミやレビューから同様に改善点を分析することができます。
競合分析のためのデータ自動収集
競合サービスや競合サイトの検索順位を定期的に自動収集しデータとして確保、日付と順位を自社で分析するようデータを準備できます。
また、更新情報等を同時に収集するようにしておけば他社の施策の何が良かったか悪かったかまで分析もでき、良かったケースのみ自社に取り込んで行くこともできます。
スクレイピングを行う際の注意点
対象のサーバ、WEBサービスに対してスクレイピングを行う際、リクエストが多くアクセスが膨大だと、サーバに大きな負荷を掛けます。
大きな負荷をかけサーバを停止させたりサービスを停止させたりした場合、業務妨害に該当するとして、逮捕者が出た例もありますので注意が必要です。
スクレイピングと著作権法
WEBサービスやページの提供者、著作権者の同意がないまま著作物をコピーまたは保存するなどの行為をすると、原則的に違法となります。
著作権法に基づきスクレイピングする際には十分注意する必要があります。
スクレイピングの目的
- 個人, 家族間での使用
- WEB検索サービスの提供
- 分析や情報解析での使用
対象コンテンツ
- 文章 (コンテンツの一部のみに留める)
- 画像 (コンテンツの一部のみに留める)
- 音声 (オープンライセンスな物)
- 映像 (オープンライセンスな物)
スクレイピングと利用規約
WEBサービスやWEBサイトには利用規約があります。
それら利用規約をよく読み、データの収集について問題がないか確認する必要があります。
各種制限への対応
- robots.txt アクセス制限内容に従う
- robotsメタタグ アクセス制限内容に従う
- Pragma:No-cacheメタタグが設定されているページはダウンロードしない
- rel=”nofollow”が設定されているリンクは辿らない
- ボットのブロッカーやアクセス制限等が¥取られていた場合は、既に取得していた情報を含めて削除する
スクレイピングとサーバーへの負荷
人がWEBサービスやWEBサイトにアクセスした場合のリクエストの間隔とはかけ離れたスピード(秒間1000アクセス等)でリクエストを飛ばした場合、
サーバには大きな負荷がかかります。
スクレイピング時には robots.txt が未設置であってもリクエストの間隔は最低1,000ms以上空ける必要があります。
Puppeteerとは
PuppeteerはDevToolsプロトコルでChromeまたはChromiumを制御するための高水準APIを提供するNodeライブラリ。 Puppeteerはデフォルトでヘッドレスで実行される。
「画面の無いChromeブラウザを自動で操ることができる」と考えていただくのが良いかと思います。
Puppeteerで何ができるのか
Chromeを自動で操ることができるため様々なことができるようになります。
- WEBページやWEBサイトの画面スクリーンショット画像を撮る
- WEBページやWEBサイトの画面をそのままPDFとして出力する
- SPAのクローリング
- フォームの入力と送信
- UIテスト・ブラウザテスト
- キーボード入力やマウス操作の自動化
Puppeteerによるスクレイピングとの違い
スクレイピングを行う場合大抵は
リクエストを飛ばす
↓
HTMLデータが返ってくる
↓
返ってくるデータを解析・加工
↓
加工データを整理し保存
となるかと思います。
Puppeteerによるスクレイピングを行う場合単にHTMLデータが返ってくるのを待つだけではなく入力や画面遷移、情報の更新まで捉えることが可能です。
Puppeteerによるアクセス(リクエスト)を飛ばす
↓
JSでの描画や入力ボタンのクリックフォームの入力により描画に変化がある
↓
必要なデータを収集
↓
データを解析・加工
↓
加工データを整理し保存
ただ単にスクレイピングしただけでは入手できないデータや画像の取得まで幅広く柔軟に行うことが可能になります。
弊社でもPuppeteerを利用したスクレイピングや機能を利用しWEB上で綺麗なPDFデータの生成に用いています。
Puppeteerを用いたシステム
まとめ
- WEBデータ収集はスクレイピングで自動化・効率化しよう
- 収集時は注意すべき点に十分に注意しよう
- Puppeteerを用いて効率的なスクレイピングを行おう