AWS上にサーバレスな汎用クローラを展開するぞ。超平面あのにのにスマートフォン用の表示で見る超平面あのにのに僕の雑記この広告は、90日以上更新していないブログに表示しています。2016-12-12AWS上にサーバレスな汎用クローラを展開するぞ。技術Tweetサーバレスな汎用スクレイパーを作った。あのにのに前回はAPIGatewayとLambdaで、指定したURLの指定した位置にあるデータを抜き出すAPIを作った。今回はサイト内探索をするようなシステムをAWS上に構築しようと思う注意:クローラは用法用量を守って、相手方のサイトに迷惑がかからないように十分な配慮を徹底しましょう。今回作るものこんな感じの構成をイメージしてる。DynamoDBの1レコードがサイトへの1リクエストに常に対応するものとし、内部リンクのURLを新たにDynamoDBのテーブルに追加していく。得られたデータは対応レコードに格納される。Streamsに流され、Lambdaで実行される。4.2プライマリキーをtarget_urlに設定。ストリームに流れるのは"新しいイメージ"のみで良いはず。FRAMEWORKを使う。DynemoDBへのレコード追加時に、Lambdaに渡されるJSONのサンプルがほしいので一旦デプロイして動かしてみる。LATESTとりあえずデータを取得(スクレイピング)console.log(event);ってやるとCloudWatchの方に吐き出されるので、そのデータをevent.jsonに入れてローカルで動かしてみる。});};これで目的のデータは得られた。結果をDynamoDBに格納DynamoDBに入れておく。node.jsをいれる。acc);});でresultが追加されるはず。今の状態だとUPDATEでもリクエストが飛んでしまうため、レコード追加時のみスクレイピング処理が走るようにする。return;一旦デプロイして動かしてみる。レコードを追加してちょっと待つと...入った!!!DynamoDBに対象URLと対象要素のセレクタを入れると、resultにデータを保存する仕組みが出来たことにななる。これはこれでなんか良さそう。UPDATE処理になる為実行されない。resultのないレコードとして残る。内部リンクを拾うって訪問したことのないページをレコード追加する。}});後は諸々調整、timeoutとかmemorysizeとか。並列数がどうなるのかが気になる。同時に叩きすぎると対象サイトに迷惑がかかるのでコントロールしたい。02:05AWS上にサーバレスな汎用クローラを展開するぞ。Tweet広告を非表示にする関連記事2016-12-031日でリアルタイムチャットを作る。