728x90
AWS 람다(Lambda)는 기본적인 라이브러리만 제공하고, 필요한 라이브러리를 import 하더라도 실행되지 않습니다. 따라서 머신러닝(Machine Learning)이나 크롤링 등을 개발하기 위해서는 추가적인 라이브러리 사용을 위해 필요한 라이브러리를 압축해서 올려서 사용해야 합니다.
웹 크롤링에 많이 사용되는 BeautifulSoup
과 requests
라이브러리를 활용해서 API 서버를 구현해보겠습니다.
1. 디렉토리를 만들고 BeatifulSoup과 requests 라이브러리를 설치합니다.
설치된 파일은 아래 계층구조로 zip파일로 압축 해야 라이브러리를 인식할수 있습니다.
Python : python, python/lib/python3.7/site-packages(사이트 디렉토리)
mkdir python \
cd python
# 현재 폴더 위치에 설치하도록 -t 옵션을 붙입니다.
pip3 install bs4 -t .
ptp3 install requests -t .
# 상위 폴더에서 설치한 파일을 압축합니다.
cd ..
zip -r crawls.zip .
2. Lambda Layers 활용하여 공통으로 사용하는 라이브러리를 등록합니다.
Lambda Layers는 버전별로 수정이 불가능하고 만약 수정이 필요하다면 zip파일을 다시 올리고 새로운 리비전이 생성됩니다.
3. 함수 생성 및 Layer 추가
크롤링 함수를 생성합니다.
Layer에 라이브러리를 추가합니다.
4. 코드 입력
삼성전자의 PBR 값을 구하는 코드를 작성해보겠습니다.
import json
import requests
from bs4 import BeautifulSoup
def lambda_handler(event, context):
# TODO implement
fs_url = 'http://comp.fnguide.com/svo2/asp/SVD_Finance.asp?pGB=5&cID=&MenuYn=Y&ReportGB=D&NewMenuID=103&stkGb=701&gicode=A005930'
fs_page = requests.get(fs_url)
soup = BeautifulSoup(fs_page.text, "html.parser")
corp_info_list = soup.find("div", {"id":"corp_group2"})
print(corp_info_list.prettify())
data = corp_info_list.select("dl")
pbr = data[6].select("dd")[1].string
json_data = {
'pbr' : pbr
}
return {
'statusCode': 200,
'body' : json.dumps(json_data)
}
작성한 코드를 테스트 하기 위한 이벤트를 구성합니다.
Lambda는 기본 128MB, 3초 Time-out입니다. 데이터 크롤링 위해 메모리와 Time-Out을 늘립니다.
5. 결과 확인
Reference
728x90
반응형
'AWS' 카테고리의 다른 글
Amazon S3 버킷으로 이미지 서버 만들기 (0) | 2021.08.07 |
---|---|
[AWS] EC2 인스턴스 SSH 접속하기(2) (0) | 2021.08.03 |
[AWS] EC2 인스턴스 SSH 접속하기(1) (0) | 2021.08.03 |
AWS Lambda 함수 배포하기 - Hello World (0) | 2021.07.25 |
EKS 뽀개기 (0) | 2021.07.22 |