lambda에 selenium, webdriver를 활용한 크롤링 코드를 올려보자!

Hyeyeon Kim·2024년 8월 24일
0

0. 크롤링 코드 수정

크롤링 코드 작성

이전에 작성한 코드에서 람다에 보낼 리턴 값을 추가했다.
추가로, 크롤링 코드 작성 중 오류를 try문으로 잡아내는 코드도 작성했다.

from datetime import datetime, timedelta
import json, time, pytz

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

def handler(event=None, context=None):
    --- 생략 ---
    try:
        --- 크롤링 코드 생략 ---
                    result_data.append({
                        "title": title.text,
                        "content": ele.text,
                        "url": url
                    })
                    driver.back()
            time.sleep(5)
        driver.quit()

        return {
        "statusCode": 200,
        "body": json.dumps({
                "message": f"Crawling completed at {today+ ' ' + target_time + ':00'}",
                "result_data": result_data
    except Exception as e:
        driver.quit()
        return {
            "statusCode": 500,
            "body": json.dumps({
                "message": f"Crawling Failed at {today+ ' ' + target_time + ':00'}",
                "error": str(e),
            }),
        }

if __name__ == '__main__':
    handler()

1. ECR을 통한 환경 세팅

제일 먼저, 람다에 크롤링 코드를 실행시키기 위해 환경 세팅을 해야한다.
처음엔 lamda layer를 통한 방법을 시도했지만 cromedriver를 실행시키기 위한 파일이 많아 docker를 이용하게 되었다....

docker file에서 환경 설정 후 main에 있는 handler함수를 실행하도록 작성하였다.
dockerfile및 크롤링 코드는 github참고

이렇게 만든 AWS ECR로 들어가 적당한 이름을 넣고 Repositories를 생성

생성되면 레포에 대한 푸시 명령들이 있는 데 실행하는 환경에 따라 맞는 명령어를 실행하면 된다.

빌드 시 주의 할 점
--platform linux/x86_64을 명시한 상태로 실행해야한다.

docker build --platform linux/x86_64 -t [레포명] .

2. Lambda 함수 생성

컨테이너 이미지 옵션을 선택하여 람다함수를 생성해야한다.
적당한 함수 이름을 작성하고
컨테이너 이미지URL에 아까 생성한 레포지토리에서 이미지를 선택한다.
아키텍쳐는 x86_64를 선택한다.

크롤링 코드를 실행하는데 오래걸리기 때문에 구성에서 메모리와 제한 시간을 넉넉하게 변경도 해주자

기본적으로 생성되는 테스트 코드를 가겨와 실행시켜보고 문제가 없으면 다음 단계로 넘어가면 된다.

3. EventBridge를 통해 주기적으로 lambda 실행시키기

일정 생성을 클릭하여
반복 일정을 선택하고 Cron 기반일정으로 설정해주었다
(cron으로 하면 밑에 다음 트리거 날짜를 보여줘서 편하다)

대상에서 lambda를 선택하고 아까 생성한 lambda함수를 선택하면된다.

profile
성장하고 싶은 백엔드 주니어 개발자

0개의 댓글