On the journey of
[AWS 사전공인교육] 6-1. Lambda-Selenium으로 크롤링하기 본문
크롤링의 기초 코드는 예전에 다룬 적이 있다 :) https://nowolver.tistory.com/173
이번에는 단순히 프로그램 깔자마자 이렇게 입력하세요! 가 아니라, lambda에서 실행 가능한 Selenium 등의 버전을 맞춰서 크롤링을 진행해보고자 한다. 그러나 현실적으로는 이 방법을 사용했을 때 특정 사이트는 Timeout/크롤링, 접속 자체를 막아두는 경우가 꽤 되며, click 등 기타 사용자의 동작이 인식되지 않는 문제도 있기에 BeautifulSoup (BS4)을 활용하여 진행하거나, 굳이 selenium을 쓰겠다면 Cloud9 환경에서 진행하는 것을 권장 :) 본 교육의 실습 환경은 아래와 같았다.
실행 환경 : python3.7
Selenium : 3.13.0
- 우선 아래의 python library 압축해둔 파일을 다운로드한다 (AWS 측에서 공유해주신 파일이므로 개념 있게 쓰기!) https://drive.google.com/file/d/1m1Ui9LFOoXX0P-TBaxCxqvfZGzTUb-Ff/view?usp=sharing
2. AWS 의 Lambda 에서 계층(Layer)을 생성
업로드 버튼을 누르고 위의 구글드라이브에서 다운로드 받은 파일을 선택해서 업로드하되, 여기에서 설정한 python 버전과 이후에 만들 람다함수의 python 버전과 일치해야 한다. Test 결과 python3.7까지는 정상적으로 실행된다.
3. 람다 함수 생성
람다 함수 생성 시 python 버전의 위에서 생성한 계층의 python 버전으로 설정한다.
4. 람다함수에 계층 추가
: 람다함수가 생성되면 페이지 최하단에 계층이라고 있는데, 여기서 [Add a layer] 를 클릭합니다.
위에서 추가한 계층을 선택하고 추가 버튼을 눌러준다.
5. lambda 함수 작성
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import os
def lambda_handler(event, context):
# TODO implement
print("Starting google.com")
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1280x1696')
chrome_options.add_argument('--user-data-dir=/tmp/user-data')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--enable-logging')
chrome_options.add_argument('--log-level=0')
chrome_options.add_argument('--v=99')
chrome_options.add_argument('--single-process')
chrome_options.add_argument('--data-path=/tmp/data-path')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--homedir=/tmp')
chrome_options.add_argument('--disk-cache-dir=/tmp/cache-dir')
chrome_options.add_argument('user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')
chrome_options.binary_location = "/opt/python/bin/headless-chromium"
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='/opt/python/bin/chromedriver')
# 여기서부터 코딩 시작하면 됩니다.
page_data = ''
driver.get('https://www.google.com')
# 검색어 입력
search_box = driver.find_element_by_name("q")
if search_box:
search_box.send_keys("Hello, Selenium")
search_box.send_keys(Keys.RETURN)
page_data = driver.page_source
driver.close()
return page_data
크롤링은 시간이 오래 걸리니 구성에서 실행 제한시간을 설정한다.
(크롬 로딩만 1분 걸리는데 참을 인에 익숙하다면 굳이 설정하지 않아도 된다. 그러나 나는 설정할 것..)
3초 → 15분으로 설정
6. 테스트 구성
테스트 버튼을 누르면 나오는 구성을 입력합니다.
7. 배포 및 실행
Deploy 후 테스트 버튼을 눌러서 실행! 간단한 예제로, 결과는 아래와 같다 (아이디는 가렸다)
'Experiences & Study > AWS' 카테고리의 다른 글
[AWS 사전공인교육] 5.AWS에서 ChatGPT 구현하기(2) (5-3.Cloud9-Langchain을 이용한 GPT 서비스~5-4.Cloud9 -ChatGPT Data Aware) (1) | 2023.10.19 |
---|---|
[AWS 사전공인교육] 5. AWS에서 ChatGPT 서비스 구현하기 (1) (1) | 2023.10.13 |
[AWS 사전공인교육] 4. AWS의 서비스 종류 (0) | 2023.10.11 |
[AWS 사전공인교육] Streamlit 활용하기 (2) (1) | 2023.10.07 |
[AWS 사전공인교육] Streamlit 활용하기 (1) (1) | 2023.10.04 |