スクレイピングの注意点
そのサイトが規約違反になっていないか確認すること。
例えば、以下のサイトではスクレイピング自体が禁止されています。
- メルカリ
- Amazon
規約違反にならないかの調査手順
- サイトの利用規約のページを開く
- Ctrl + Fで検索窓を開いて「自動」、「クローリング」、「スクレイピング」、「ロボット」、「ボット」、「RPA」、「スクレーパー」などと検索する。(英語サイトであればauto、robot、bot、crawlingcrawling、scrapingなどと検索する。)
- どれも検索にヒットしないのであれば特にそのサイトではスクレイピングを禁止しているわけではないと判断できる。
著作権違反していないか確認すること
取得したデータ(rawデータ)をそのまま譲渡すると著作権侵害になってしまいます。
ただし、「何かしらの分析を加えたデータ」であれば譲渡しても問題ないと言われています。
BOT対策
BOTとはロボットによるアクセスか、人間によるアクセスかを判断することです。サイトによっては必要になります。BOTかどうかの判定には様々な方法があります。
- UserAgentによる判別
例えば、ScrapyなどではUserAgentの値をいじることができそれによって人間によるアクセスと認識させることができます。
APIが用意されている場合はそちらを利用する。
待ち時間をランダムにする。
Pythonでは待ち時間を設定するにはtimeライブラリのsleepを使いますがあえて待ち時間をランダムにしてあげる手法があります。
1 2 3 |
from time import sleep sleep(2) # 2秒固定 sleep(random.randint(1,10)) # 待ち時間を1〜10秒の間でランダムに選定 |
読み込み待機時間がランダムになる方がより人間らしいクローリングになるので、制限の厳しいサイトなどでは使えるテクニックになります。
ログイン画面に注意
大抵のログイン画面ではCSRFトークンをPOSTする必要があるので考慮しましょう。なお、画像認証があるようなサイトの場合は認証の突破は困難というかセキュリティ的に問題ありなので依頼を断りましょう。
基本
robots.txtは事前に確認する。
robots.txtとは各サイトに定められているクローラーに対して制限事項を定義することができるファイル。SEOの検索エンジンのクローラーに指示を出すために作成している物ですが、スクレイピングプログラムを作る際もこのファイルは関係してくるのでよく確認しておく必要があります。
確認方法
スクレイピングしたいサイトのトップドメインから以下のように指定すれば確認できます。
1 |
http://xxx.com/robots.txt |
以下の情報が記載してあります。(ちなみに、全く記載がないサイトもたくさんあります。)
- ここのURLはアクセスしても良いですよ。
- ここのURLはアクセスしてはいけないですよ。
例えば、以下の例で言えば、UserAgentがGooglebotの場合は「/assistapi」や「/bin」へアクセスしないでくださいねという意味になります。
1 2 3 |
User-agent: Googlebot Disallow: /assistapi Disallow: /bin |
特に見る箇所は、User-agentが「*」になっている物をよく見ておく必要があります。
1 2 |
User-agent: * Disallow: /xxx |
User-agentはアクセス元を指していて、*なら全てのユーザーに対する事項になり、これから作成するスクレイピングプログラムも基本的にはこれに該当することになるためです。DisallowにこれからスクレイピングしたいURLの記載がある場合は規約違反になってしまうのでスクレイピングプログラムの作成もやめざるおえないです。
URLの変更に対する対処
URLがいきなり変わったりしてアクセスできなくなる場合があります。その場合は実行時例外を放置するのではなく、例外処理をしてどのURLでアクセスできなくなったことがわかるようにしてあげましょう。
定期実行が必要か確認すること
Scrapy Cloudなどのクラウドサービスにスクレピングプログラムをデプロイする必要があります。(自分のPCだとシャットダウンするため
robotparser
Pythonの標準モジュールでそのサイトがスクレイピングを許可しているか調べることが可能です。事前に、そのサイトがスクレイピングを許可しているか調べる(利用規約や、robots.txtなどを読む)のですが非常に大変です。
robots.txtを見てこれからスクレイピングしようとしているURLがスクレイピングOKなのかチェックしてくれます。ただ、実際にログインしていないと使えないrobots.txtを読み込めないサイトもあったりするので一概に良いというわけではないです。また、robots.txtでは許可しているが、利用規約では禁止しているサイトもあるのでこれだけに頼るのははっきり言って無理です。
スクレイピングの流れ
- HTMLを取得する。
- 取得したHTMLを解析する。
- 解析して取得したデータを整形する。
- スクレイピング結果を保存する。
Scrapyを利用したスクレイピングの流れ
Scrapyを利用したスクレイピングの流れは以下になります。
Webページのダウンロード
- 最初にアクセスするURLを指定する。
- リンクのたどり方を指定する。
データの抽出
必要なデータの抽出方法を指定する。
データの保存
CSVなどに保存する。
画像取得スクレイピングプログラムの設計
- Seleniumでまずはダウンロードしたい「画像のURL」と「画像タイトル」だけを抽出してCSVファイルなど保存しておく。
- その後、1で抽出したURL一覧に対してSeleniumを使わずに一気に画像をダウンロードする。
なぜ一旦画像URLだけ保存するかというと、処理を効率化するためという意味もありますが、画像サイトの参照元がその画像サイトの著作権とは限らないためです。どこから取得した画像かどうかログを残したいという意味で一旦画像URLだけ保存する設計が望ましいです。
サーバー負荷の配慮
レスポンスタイムを監視する。
明らかに落ちてきた場合はスクレイピングは止める。JavaScriptでレスポンスタイムの取得はできます。
サーバーアクセスの間隔を1秒以上開けるようにする。
サーバーに負荷がかかって場合によってはサーバーが落ちるケースもあるため。
ただ、これにも様々な見解があって「1分に1回程度ならよいだろう。」と考える人もいます。
保存先
様々な保存先があります。
- CSV
- JSON
- スプレットシート
- Excel
- データベース
この記事へのコメントはありません。