Pythonでスクレイピング するLambda関数を作る〜Lambda編〜

 
この記事を書いている人 - WRITER -
kmryk0526
詳しいプロフィールはこちら

前回のPython編で作成したscraping-sample.zipをLambdaにデプロイし、Lambda関数として実行できるようにします。

Lambda関数の作成

マネジメントコンソールでLambda関数を作成します。
※本当はこれもCLIでやりたかったけど既存のIAM RoleをARNで指定する必要があって面倒なのでやめました。
関数名をscraping-sample、ランタイムをPython 3.7として、関数を作成します。

デプロイパッケージのアップロード

AWS CLIでscraping-sample.zipをLambdaにアップロードします。
※AWS CLIがインストールされていること、およびaws configreでAccess Key ID,Secret Access Key,region nameが設定されていることが前提となります。まだ、AWS CLIに入門していない方はLambdaの画面からもアップロードできるのでそっちでも良いかと。

–function-name 上で作成したLambda関数の名前を指定
–zip-file fileb://[アップロードするzipファイルの相対パス]を指定

aws lambda update-function-code --function-name scraping-sample --zip-file fileb://scraping-sample.zip
{
"TracingConfig": {
"Mode": "PassThrough"
},
"CodeSha256": "Y1oVBgl3iXBRGKgn4skzRj2eC1vApFsaWMtmy8J3J/g=",
"FunctionName": "scraping-sample",
"CodeSize": 1154367,
"RevisionId": "701c4838-8113-4a03-888e-54eea654d86d",
"MemorySize": 128,
"FunctionArn": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:scraping-sample",
"Version": "$LATEST",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/scraping-sample-role-givvyn8l",
"Timeout": 3,
"LastModified": "2019-10-19T14:43:23.250+0000",
"Handler": "lambda_function.lambda_handler",
"Runtime": "python3.7",
"Description": ""
}

zipがLambda関数に展開できたことを確認する

Lambdaで動作するように修正

引数の受け渡しをLambdaのイベントハンドラ経由で行うようにし、また戻り値をjson型にします。
せっかくjsonで返すので、titleタグとpタグは別々の変数に入れて返すようにします。

import requests
from bs4 import BeautifulSoup
import json

def lambda_handler(event, context):
    url = event["url"]
    html = requests.get(url)
    soup = BeautifulSoup(html.text,'html.parser')
    title = soup.title.string
    text_body = []
    
    for i in soup.find_all('p'):
        text_body.append(i.get_text(strip=True))

    page = {
        "title": title,
        "text_body": text_body
    }
    return page

ちゃんと動くか確認

URLを渡すテストイベントを作成します。

テストを実行してログを確認してみましょう

うまくできました。
ただ、所要時間は1207.06 msということで思ってたより重い処理でした。
改善の余地があるかもしれません。

おしまい。

参考サイト
AWS CLI Command Reference/update-function-code

この記事を書いている人 - WRITER -
kmryk0526
詳しいプロフィールはこちら
Ads by Google




Ads by Google








- Comments -

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Copyright© つれづれテック , 2019 All Rights Reserved.