SlideShare a Scribd company logo
クローラー&Webスクレイピング
with AWS Lambda
JAWS-UG アーキテクチャ専門支部 クラウドネイティブ分科会 CDP議論会 #7
佐々木拓郎
2016/03/25
自己紹介
佐々木 拓郎
• AWSとモバイル
• http://blog.takuros.net/
• http://www.slideshare.net/
takurosasaki/
• twitter: @dkfj
AWSの一番分厚い本
(大容量480P)
http://amzn.to/1BLiYcO
Rubyのクローラー本
何故か人気の本 by 編集者
http://amzn.to/1lsJ5id
クローラー&スクレピング
•Webスクレピング
✓特定のページから情報を抜き出す行為のこと
✓HTMLのDOM解析派と正規表現によるパターンマッチング派がいる
•クローラー
✓Webを巡回して文章や画像を定期的に取得する行為
✓巡回・抽出(スクレイピング)・保存の機能がある
3種類のページタイプ
•ステートレスなページ(状態を持たない)
✓いわゆる静的ページに多い
✓一番簡単にデータをスクレイプできる
•ステートフルなページ(状態を持つページ)
✓ログイン状態やPOSTなど前画面の情報を前提とするタイプ
✓サーバサイドで動的に生成されるページの多くがこのタイプ
•JavaScriptで動的に構築されるページ
✓JavaScriptを元にクライアント側でページを構築される
✓ステートレス/ステートフル、どちらのタイプもある
ステートレスなページ
スクレイピング
プログラム
Webサイト
スクレイピングのライブラリ選定だけがポイント
html
url
ステートフルなページ
スクレイピング
プログラム
Webサイト
• 対話型のライブラリが必要な場合がある
• ブラウザは不要
• ログイン状態の有無は、Cookieのみで対処可能なケースも
パラメータ
遷移
html
JavaScriptによる動的ページ
スクレイピング
プログラム
Webサイト
• ブラウザが必要。ほぼヘッドレスブラウザを使う
• PhantomJS&CasperJS
  (JavaScript APIで操作できるWebKitブラウザ)
• JavaScriptを解析して、データ部分を探すという手もある
ヘッドレス
ブラウザ
リクエスト
html
リクエスト
レスポンス
クローラー/スクレイプのライブラリ
JavaScript Python Ruby
構文解析&抽出 cheerio-httpcli BeautifulSoup nokogiri
巡回&保存 ??? Scrapy anemone
Webページ操作 mechanize-js? mechanize? Mechanize
ヘッドレス
ブラウザ
PhantoJS
+CasperJA
Splinter?
Capybara
(Selenium
+PhantomJS)
クローラー実行基盤としての
Lambada
•理想的な環境
✓グローバルIPありでプログラムを実行できる
✓スクレイピングだけであれば、文句なし
✓発火イベントが充実しているので、収集と解析を分離しやすい
•注意点
✓処理時間限界(5分)があるので、クローラーの構造を考える必要あり
✓複数グローバルIPの取得を任意では出来ない
スクレイプの
アーキテクチャ例
②HTTP
リクエスト
③HTTP
レスポンス
④html
保存
⑤S3 Event
Call
⑥S3
get Object
⑦スクレイプ
⑧結果①キック
サービス監視
生死監視用のページを作成すべき
• apache/nginxでレスポンスするページ
• apache/nginx+APPサーバでレスポンスするページ
• apache/nginx+APPサーバ+DBでレスポンスするページ
Web
層
HTTP O.K.
アプリ
層
DB
層
アプリ O.K.
DB O.K.
手抜きスクレイピング
json
Webサイト
サービス(import.io)併用
http
リクエスト
スクレイプ
参考情報
•Lambdaで作るクローラー/スクレイピング
✓http://blog.takuros.net/entry/2014/12/14/053606
•AWS Lambda+PhantomJS/CasperJSでスクレイピング
✓http://blog.takuros.net/entry/2015/12/01/074444
AWSの鈍器のような本
(640ページ!?)
4/11発売開始!!
絶賛、予約受付中!!
http://amzn.to/1R4yyLy

More Related Content

JAWSUG architecture-crowler