16
クローラー&Webスクレイピング with AWS Lambda JAWS-UG アーキテクチャ専門支部 クラウドネイティブ分科会 CDP議論会 #7 佐々木拓郎 2016/03/25

JAWSUG architecture-crowler

Embed Size (px)

Citation preview

クローラー&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