基本
- スクレイピング対象、要素、頻度
- 対象が変更される可能性、監視方法
- スクレイピング自体の許可をとっているか、業界慣習は大丈夫か
- HTMLパースのやりかた
- クローリングのタイミング
- ヘッドレスブラウザを利用した、ブラウザ操作の自動化
- アグリゲーション
- リンクのリスト
- 自動クローリングのアグリゲーション
- 例. はてなブックマーク、pocket、Yahooニュース、グノシー、smartnews
Web crawler - Wikipedia, the free encyclopedia
1. Scrapping/Crawlingする側の視点
Basic
- 基本的には、Scrappingするサイトの構造を把握する必要がある
- 例えば、URL構造、WEBサーバーの挙動、JavaScript
- sitemap.xml, rss, robots.txtなども確認する
- 汎用的なScrappingツールを作るのは大変(サイトの構造が違うので)
- なにで作られているかも調査する(CMSのWEBサイト、WAFのWEBアプリ)
Problem
- WEBサーバーに要求される、HTTP Request Header(User-Agent)を設定する
- 各種認証に対応する
- IPアドレスの制限に気をつける
Input and Parse
- HTMLパーサーを利用する
- robots.txtを確認する
- xPathを利用する
- sitemap.xml, rssのすべてのリンクをパースする
- サイト内のリンクを辿っていく
- ページないのすべてのlinkをアクセスしていく
- ヘッドレスブラウザ(Phantomjs)を利用する
- ブラウザ操作ツール(Selenium)を利用する
- Proxyサーバーを経由してIPアドレスを変更しながらアクセスする
Output
- テキストデータで出力する
- JSONで出力する
- CSVで出力する
- MySQLに出力する
- MongoDBに出力する
RubyGems
Ruby Scrapping Tutorial
- Webスクレイピングを用いたデータ検索クローラ構築入門 · ZIGExN/ruby-trailning Wiki
- 【スクレイピングのやり方#1】周りに勧められてスクレイピングなるものをしてみたいけど何すればいいのかわからなかったあの日の自分へ | Project name
- Ruby - Webスクレイピングライブラリ “Yasuri” をリリースしました - Qiita
- Rubyとか使ってクローリングやスクレイピングするノウハウを公開してみる! - 病みつきエンジニアブログ
- Anemoneによるクローラー入門 | feedforce Engineers’ blog
Book
- Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
- JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック
- Spidering hacks―ウェブ情報ラクラク取得テクニック101選
(追記:15.9.18) Node.js でスクレイピング
2. Scrapping/Crawlingされる側の視点
- 人間かプログラムかを判別するしかないので、基本は防げない
- DoS攻撃を防ぐようなアプローチで、WEBサーバーでIPアドレスを制限するしかない
- 例えば、短期間での集中アクセスなど
- しかし、企業のローカルネットなど同一IPアドレスから複数人でアクセスされるケースもある
- また、Proxyを経由されるとIPアドレス変更できるので本質的には防げない
3. WEBサイト更新情報の通知
4. 定期処理
- whenever
- clockwork
- rufus-scheduler
- Rundeck
- crontab
The Ruby Toolbox - Scheduling: Run recurring tasks easily at scheduled times
5. 権利問題について
スクレイピング/クローリング的な話は、結構タブー視されてしまっています。しかし、著作権法第47条の7「情報解析のための複製等」にて認められておりますから、もっと積極的にスクレイピングしましょう、的なことをお伝えしたい、ということです。
Rubyとか使ってクローリングやスクレイピングするノウハウを公開してみる! - 病みつきエンジニアブログ
6. 近年のサービスの特徴 ~ クロールとキュレーション
先週は、IVSの併設イベントのCTO職や技術責任者の人たちが集まる集いに参加するために宮崎に行っていたが、そこで会った人たちの印象として、クローラを使う会社の元気な姿があった。 by BASE CTO えふしん @ 2015年6月14日
クローラ型サービスは、昨今のテック系スタートアップの基本? | F’s Garage@fshin2000
- iQON: 各種ファッションサイトの商品情報をクロール
- SmartNews/Gunosy: Fb/Twの情報を取得
- じげん/Indeed: 各種採用サイトの情報をクロール
- ハッカドール: アニメ/声優情報のまとめのためにクロール
- NAVERまとめ/MERY: 手動でWEBから情報を取得してまとめる
WEB上の情報を、クローラーと手動キュレーションで集めて、表示するというのが基本。
- Machine Learning
- Deep Learning
- 自然言語処理
- 統計分析
- レコメンドエンジン
追加で上記の開発をしている。
例えば、こんなものも ~ 形態素解析・わかち書き
- rubyから形態素解析ライブラリkuromojiを使う - Qiita
- 日本語の文章を単語に分割する(分かち書きをする) - DoboWiki
- 【natto・mecabで】5分で形態素分析に入門して、修造の「人生を強く生きる83の言葉」の頻出語を調べてみる。【形態素解析】 | Project name
7. アイデア例: タレント情報通知アプリ
8. IPアドレス偽造
Ruby - IPアドレス偽装から周辺事項を調べる - Qiita
9. プロトタイプ作成で、WEBサービスを利用する
- Blockspring
- まだAPIで消耗してるの? サクッとデータが欲しいなら「Blockspring」を使おう! | #GUNMAGISGEEK
- いろんな既存サービスからスプレッドシート上にデータを読み込むツールBlockspringが$3.4Mを調達 | TechCrunch Japan
Blockspringで取得したデータをAPIにできるサービスがあります。
プロトタイプレベルならめちゃくちゃ便利。