こんにちは、技術チームの陳です。
今月も技術チーム内で技術勉強会を開催したので、その内容をお伝えしたいと思います!
今回はSCMチームの孫さんによる、【crawler浅入浅出】の勉強会でした。
■crawlerとは?
ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラムである。「ボット(Bot)」、「スパイダー」、「ロボット」などとも呼ばれる。
■crawler vs 著作権
Webコンテンツは、すべて誰かの著作物となります。その為、著作権法に従うものとなります。著作権法では、次の目的は著作物が自由に使える場合とされています。
・個人や家族間で使用する。
・Web検索サービスを提供する。
・情報解析をする。
■参考サイト
■crawlerのタスク分解
crawlerとは、ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラムである。「ボット(Bot)」、「スパイダー」、「ロボット」などとも呼ばれる。
① ウェブ上の文書や画像など → 目標urlとcontentの指定
② 周期的に → batch設定
③ 取得
④ 自動的にデータベース化する → DB保存
③は一番難しそうですね。どうすれば取得できますか?
一般的には、3つの方法があります。
- API
- 手動
- クローラー
■crawlerフレームワーク:scrapy
An open source and collaborative framework for extracting the data you need from websites.
In a fast, simple, yet extensible way.
■scrapy使い方
- Spider
クロール対象のサイトへのリクエスト、レスポンスのパース処理を記述します。どのようにサイトを辿って、ページの内容をどうパースするかのロジックが Spider に書かれます。
- allowed_domains
このスパイダーがクロールできるドメインを含む文字列のオプションのリスト。
- start_urls
特定のURLが指定されていない場合, スパイダーがクロールを開始するURLのリスト. したがって, ダウンロードされる最初のページはここにリストされたページになります. 後続のURLは, 開始URLに含まれるデータから順番に生成されます。
- rules
1つ(または複数)の Rule オブジェクトのリストです. 各 Rule は, サイトをクロールするための特定の動作を定義します。
- parse(response)
これは, リクエストがコールバックを指定していないときに, ダウンロードされたレスポンスを処理するために Scrapy に使用されるデフォルトのコールバックです。
■scrapy setting
- リクエスト間隔を設定する
settings.py を開いて DOWNLOAD_DELAY にリクエストを送信する間隔(秒)をセットしましょう(デフォルトではコメントアウトされています)。リクエスト間隔が短すぎると DoS攻撃と同等のアクセスとなってしまうので、少なくとも数秒程度は間隔を空けるようにしましょう。
- レスポンスのキャッシュを設定する
Scrapy ではレスポンスのキャッシュ機能も用意されています。Spider の実装をして試行錯誤する時には何度も同じページへのリクエストが実行されてしまうので、特に開発中にはキャッシュを有効にした方がいいです。
■感想
日常の仕事や個人勉強などには、クローラーを活用してネット上の情報を簡単に手に入れられますが、著作権問題に注意する必要があります。また、頻繁的にサイトを巡回してしまうと、サイトのサーバに負荷が掛かるため、常識範囲内で利用したほうがいいと思います。