jawsug architecture-crowler
TRANSCRIPT
クローラー&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.
手抜きスクレイピング
jsonWebサイト
サービス(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