프로젝트 준비(자동화 스크랩핑)

2025. 4. 15. 11:13·프로젝트

웹 스크래핑을 자동화하려면 여러 가지 방법을 사용할 수 있습니다. 이를 통해 반복적인 스크래핑 작업을 자동화하고, 필요한 데이터를 효율적으로 수집할 수 있습니다. 가장 흔히 사용되는 자동화 방법은 Python 코드를 통해 스크래핑을 주기적으로 실행하거나, 크론(Linux) 또는 작업 스케줄러(Windows)와 같은 도구를 사용하여 자동으로 스크래핑 작업을 예약하는 것입니다.

1. 스크래핑 코드 자동화

웹 스크래핑 작업을 자동화하려면 Python 코드를 작성하고 이를 주기적으로 실행하는 방법을 사용할 수 있습니다. 예를 들어, beautifulsoup, requests, Selenium 등을 사용하여 데이터를 추출하고, 이를 자동으로 처리하도록 설정할 수 있습니다.

2. 주기적으로 자동 실행하는 방법

스크래핑을 주기적으로 자동 실행하려면 아래와 같은 방법들을 사용할 수 있습니다:

(1) time.sleep()을 사용하여 일정 시간 간격으로 스크래핑 실행

Python 코드 내에서 time.sleep()을 사용하여 스크래핑 간격을 설정할 수 있습니다. 예를 들어, 1시간마다 스크래핑을 실행하는 코드를 작성할 수 있습니다.

 
import time
import requests
from bs4 import BeautifulSoup

def scrape_melon():
    url = "https://www.melon.com/chart/index.htm"
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}
    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, "html.parser")
        # 스크래핑 로직 (예: 차트 정보 추출)
        print(soup.title.text)
    else:
        print(f"Failed to retrieve data, status code: {response.status_code}")

# 매 1시간마다 스크래핑 실행
while True:
    scrape_melon()
    time.sleep(3600)  # 3600초 = 1시간
 
 

위 코드에서는 scrape_melon() 함수를 실행하고, time.sleep(3600)을 사용하여 1시간마다 반복적으로 실행하도록 설정합니다.

(2) cron (Linux/Mac) 또는 Task Scheduler (Windows) 사용

스크래핑 작업을 OS의 예약 작업 시스템을 사용하여 주기적으로 실행할 수 있습니다. 이를 통해 서버나 컴퓨터가 켜져 있는 동안 자동으로 스크래핑을 실행할 수 있습니다.

Linux/Mac (cron 사용):
  1. 먼저, 스크래핑 코드가 담긴 Python 파일을 작성합니다. 예를 들어, melon_scraping.py라는 파일을 작성했다고 가정합니다.
  2. 터미널에서 crontab -e를 입력하여 cron 편집기를 엽니다.
  3. 아래와 같이 주기적인 작업을 추가합니다. 예를 들어, 1시간마다 스크래핑 작업을 실행하려면 아래와 같이 입력합니다:이 설정은 매 시간 0분마다 melon_scraping.py 파일을 실행합니다.
  4. bash
     
     
0 * * * * /usr/bin/python3 /path/to/melon_scraping.py
Windows (Task Scheduler 사용):
  1. 작업 스케줄러를 열고, 새 작업을 만듭니다.
  2. 작업 이름을 지정하고, 트리거 탭에서 원하는 실행 주기를 설정합니다.
  3. 동작 탭에서 프로그램 실행을 선택하고, Python 실행 파일 경로와 스크래핑 스크립트 경로를 입력합니다.
    • 프로그램/스크립트: C:/Users/Username/AppData/Local/Programs/Python/Python3x/python.exe
    • 인수 추가: C:/path/to/melon_scraping.py
  4. 예를 들어:

3. Selenium을 사용하여 브라우저에서 동적 데이터 자동화

만약 동적 페이지에서 데이터를 스크래핑하려면 Selenium을 사용하여 브라우저 자동화를 통해 스크래핑을 할 수 있습니다. Selenium을 사용하면 자바스크립트로 렌더링되는 페이지도 데이터를 추출할 수 있습니다.

Selenium 예시:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

def scrape_melon():
    driver = webdriver.Chrome(executable_path='/path/to/chromedriver')  # chromedriver 경로 설정
    driver.get("https://www.melon.com/chart/index.htm")
    
    # 페이지가 로드될 때까지 대기
    time.sleep(3)

    # 데이터 추출
    chart_title = driver.find_element(By.CSS_SELECTOR, "h3.tit_chart")
    print(chart_title.text)

    # 스크래핑 작업 후 브라우저 종료
    driver.quit()

# 자동화 실행
while True:
    scrape_melon()
    time.sleep(3600)  # 1시간마다 실행

4. 크롤링 후 데이터 저장

자동화된 스크래핑 작업이 완료되면, 결과 데이터를 CSV, JSON, 데이터베이스 등에 저장할 수 있습니다. 이를 통해 스크래핑 데이터를 분석하거나 다른 시스템과 연동할 수 있습니다.

예시 (CSV 저장):

import csv

def save_data_to_csv(data):
    with open('melon_data.csv', mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(["Rank", "Song Title", "Artist"])  # 헤더 작성
        writer.writerows(data)  # 데이터 작성

# 예시 데이터
melon_data = [
    [1, "Song 1", "Artist 1"],
    [2, "Song 2", "Artist 2"],
]

save_data_to_csv(melon_data)

5. 결론

웹 스크래핑을 자동화하려면 스크래핑 코드와 주기적인 실행을 결합하는 방법이 필요합니다. time.sleep()을 사용하여 일정 간격으로 실행하거나, cron(Linux/Mac) 또는 Task Scheduler(Windows)를 사용하여 주기적으로 작업을 예약할 수 있습니다. 동적 페이지에서 스크래핑을 해야 할 경우, Selenium을 사용해 브라우저에서 자동으로 데이터를 추출할 수도 있습니다.

스크래핑 작업을 주기적으로 자동화하면 반복적인 데이터를 효율적으로 수집할 수 있고, 이를 통해 데이터 분석이나 다른 활용을 할 수 있습니다.

 

나의 말:

일반적인 현업에서는 어떻게 자동화하지? 가장 빈번하게 사용하는방법은?
 

ChatGPT의 말:

현업에서 웹 스크래핑 작업을 자동화하는 방법은 여러 가지가 있습니다. 자동화의 목적은 반복적인 데이터 수집 작업을 효율적으로 처리하고, 주기적으로 데이터를 수집하거나 새로운 데이터를 실시간으로 추적하는 것입니다. 일반적으로 사용되는 자동화 방법은 **크론(cron)**과 작업 스케줄러와 같은 예약된 작업 시스템을 활용하는 방식입니다. 현업에서 가장 빈번하게 사용하는 자동화 방법은 서버 환경에서의 스케줄링과 클라우드 기반 시스템을 활용하는 방법입니다.

1. 서버 환경에서의 예약 작업 (Crontab, Task Scheduler)

서버 환경에서는 크론(cron)(Linux/Mac) 또는 작업 스케줄러(Task Scheduler)(Windows)를 많이 사용합니다. 이 방법은 서버에서 스크래핑 작업을 주기적으로 실행할 수 있도록 합니다. 이를 통해 스케줄링된 시간에 맞춰 스크래핑 작업을 자동으로 실행하게 할 수 있습니다.

Linux/Mac: cron 사용

cron은 Unix 계열 시스템에서 예약된 작업을 자동으로 실행할 수 있게 도와주는 도구입니다. 스크래핑 작업을 일정 간격으로 자동으로 실행하려면 cron을 사용하여 작업을 예약할 수 있습니다.

  • 설정 방법:
    1. 스크래핑 코드 작성: Python 코드로 웹 스크래핑 작업을 작성합니다.
    2. 크론 설정: crontab -e 명령어로 크론 편집기를 열고, 주기적으로 실행할 작업을 설정합니다.
    3. 예를 들어, 1시간마다 스크래핑을 실행하려면 다음과 같이 설정할 수 있습니다.
     
    이 설정은 매 시간 0분마다 melon_scraping.py 스크립트를 실행하도록 합니다.
0 * * * * /usr/bin/python3 /path/to/melon_scraping.py

Windows: Task Scheduler 사용

Windows 환경에서는 Task Scheduler를 사용하여 주기적인 작업을 예약할 수 있습니다.

  • 설정 방법:
    1. 스크래핑 코드 작성: Python으로 작성한 스크래핑 스크립트.
    2. 작업 스케줄러:
      • Windows 작업 스케줄러를 열고, 새 작업을 만듭니다.
      • 트리거 탭에서 주기적으로 실행할 간격을 설정합니다.
      • 동작 탭에서 Python 실행 파일과 스크립트를 지정하여 설정합니다.

2. 클라우드 기반의 자동화 도구

현업에서는 클라우드 서비스를 활용하여 웹 스크래핑 자동화 작업을 수행하는 경우가 많습니다. 이는 운영 환경에서 서버 관리가 용이하고, 스케일링을 쉽게 할 수 있기 때문입니다. 대표적으로 AWS Lambda와 Google Cloud Functions가 많이 사용됩니다.

AWS Lambda를 사용한 자동화

AWS Lambda는 서버리스 컴퓨팅 서비스를 제공하며, 코드를 실행할 때 서버를 관리하지 않아도 되므로 매우 효율적입니다. Lambda를 사용하면 특정 시간에 맞춰 자동 실행하는 기능을 Amazon CloudWatch Events와 연동하여 설정할 수 있습니다.

  • 설정 방법:
    1. Lambda 함수 작성: Lambda로 실행할 Python 스크립트를 작성합니다.
    2. CloudWatch Events 설정: 이벤트 규칙을 설정하여 Lambda 함수가 주기적으로 실행되도록 합니다. 예를 들어, 매일 1시에 스크래핑을 실행하도록 설정할 수 있습니다.

Google Cloud Functions

Google Cloud Functions도 서버리스 환경에서 작동하는 자동화 도구로, 주기적인 작업 실행을 위해 Google Cloud Scheduler와 함께 사용할 수 있습니다.

  • 설정 방법:
    1. Cloud Function 작성: Python으로 스크래핑 함수 작성.
    2. Cloud Scheduler 설정: 구글 클라우드의 Cloud Scheduler를 사용하여 함수가 주기적으로 실행되도록 설정합니다.

3. Docker를 활용한 자동화

현업에서는 Docker와 같은 컨테이너화 기술을 활용하여 웹 스크래핑 작업을 자동화하는 경우가 많습니다. Docker를 사용하면 환경 설정을 일관되게 유지할 수 있고, 멀티 플랫폼에서 스크래핑 코드를 실행할 수 있습니다.

  • 설정 방법:
    1. Dockerfile 작성: 스크래핑 환경을 Docker 이미지로 구성합니다.
    2. Docker Compose: 여러 개의 스크래핑 작업을 병렬로 실행하거나, 주기적인 작업을 자동화할 수 있습니다.
    3. 배포: Docker 이미지를 AWS EC2, Google Cloud VM 등의 서버에 배포하여 자동화된 스크래핑을 수행합니다.

4. Selenium과 WebDriver를 이용한 자동화

동적 페이지에서 스크래핑을 수행해야 할 경우, Selenium을 사용하여 웹 브라우저에서 자동화된 방식으로 작업을 수행할 수 있습니다. 현업에서는 주로 Selenium Grid를 활용하여 여러 대의 브라우저 인스턴스를 병렬로 실행하고, 스크래핑을 효율적으로 처리합니다.

  • 설정 방법:
    1. Selenium 코드 작성: 웹 페이지 상의 데이터를 자동으로 추출하도록 Selenium을 사용합니다.
    2. Selenium Grid: 여러 브라우저에서 동시에 스크래핑을 실행할 수 있도록 Selenium Grid를 설정합니다.
    3. Docker와 함께 사용: Selenium Grid와 Docker를 결합하여 효율적으로 스크래핑을 자동화하고 관리할 수 있습니다.

5. 결론

현업에서 가장 빈번하게 사용하는 방법은 예약된 작업 시스템을 사용하는 것입니다. cron 또는 **Task Scheduler**를 사용하여 서버에서 주기적인 자동화 작업을 설정하는 방법이 일반적입니다. 또한, **클라우드 기반 시스템(AWS Lambda, Google Cloud Functions)**을 사용하여 서버리스 방식으로 작업을 자동화하는 방법도 많이 활용됩니다. 이를 통해 주기적인 데이터 수집이나 실시간 모니터링을 자동으로 처리할 수 있습니다.

  • 서버 환경에서는 cron이나 Task Scheduler를 사용하여 주기적인 작업을 자동화
  • **클라우드 서비스(AWS Lambda, Google Cloud Functions)**를 활용하여 서버리스 방식으로 자동화
  • Docker와 Selenium Grid를 사용해 멀티 환경에서 대규모 자동화

네, AWS Lambda를 활용하여 웹 스크래핑을 자동화할 수 있습니다. AWS Lambda는 서버리스 컴퓨팅 환경을 제공하여, 서버를 관리할 필요 없이 코드를 실행할 수 있게 해줍니다. 이를 통해 웹 스크래핑 작업을 주기적으로 실행하거나, 이벤트 기반으로 실행할 수 있습니다.

AWS Lambda로 웹 스크래핑 자동화하는 방법

  1. Lambda 함수 작성: 웹 스크래핑 작업을 처리하는 Python 코드를 작성합니다.
  2. API Gateway 또는 CloudWatch Events를 사용하여 주기적인 실행을 설정합니다.
  3. IAM 역할 및 권한 설정: Lambda 함수가 필요한 권한을 갖도록 IAM 역할을 설정합니다.
  4. Lambda 실행: Lambda 함수가 주기적으로 실행되도록 설정하거나 특정 이벤트가 발생했을 때 실행되도록 설정합니다.

1. Lambda 함수 작성하기

AWS Lambda에서 Python을 사용하여 웹 스크래핑 코드를 작성할 수 있습니다. 예를 들어, requests와 BeautifulSoup을 사용하여 웹페이지에서 데이터를 추출하는 코드입니다.

import requests
from bs4 import BeautifulSoup

def lambda_handler(event, context):
    # 웹 스크래핑 대상 URL
    url = "https://www.melon.com/chart/index.htm"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    }

    # HTTP GET 요청 보내기
    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, "html.parser")
        
        # 예: 웹 페이지의 제목을 출력
        title = soup.title.string
        print(f"웹 페이지 제목: {title}")
        
        # 추가 스크래핑 로직을 여기에 작성
        
        return {
            'statusCode': 200,
            'body': f"Successfully scraped the title: {title}"
        }
    else:
        return {
            'statusCode': 500,
            'body': f"Failed to retrieve data, status code: {response.status_code}"
        }
  • lambda_handler: AWS Lambda에서 실행되는 핸들러 함수입니다. 이벤트(event)와 컨텍스트(context)는 Lambda 실행 시 제공되는 인자입니다.
  • requests를 사용하여 멜론 웹페이지에서 데이터를 가져오고, BeautifulSoup을 사용하여 HTML을 파싱합니다.
  • 스크래핑한 데이터를 콘솔에 출력하거나, 다른 서비스와 연동하여 저장할 수 있습니다.

2. Lambda를 주기적으로 실행하기 (CloudWatch Events 사용)

Lambda 함수가 주기적으로 실행되도록 설정하려면 Amazon CloudWatch Events를 사용합니다. 예를 들어, 1시간마다 Lambda가 실행되도록 설정할 수 있습니다.

  1. AWS Management Console에서 CloudWatch를 열고, Events 탭을 선택합니다.
  2. Create Rule을 클릭하여 새로운 규칙을 생성합니다.
  3. Event Source에서 Schedule을 선택하고, Cron 표현식 또는 고정된 간격을 설정합니다. 예를 들어, 매 1시간마다 실행하려면 rate(1 hour)로 설정할 수 있습니다.
  4. Target에서 Lambda function을 선택하고, 앞서 작성한 Lambda 함수를 선택합니다.
  5. Rule Name과 Description을 입력한 후, Create를 클릭하여 규칙을 생성합니다.

3. Lambda 함수 권한 설정

Lambda 함수가 외부 인터넷 리소스에 접근할 수 있도록 VPC나 IAM 역할을 적절하게 설정해야 합니다.

  • IAM 역할: Lambda가 requests 라이브러리로 웹 페이지에 접근할 수 있도록 Internet access를 허용하는 IAM 역할을 설정해야 합니다.
  • VPC: Lambda가 VPC 내에서 실행되는 경우, 인터넷 액세스가 가능하도록 NAT Gateway를 설정해야 합니다.

4. Lambda 함수 실행

CloudWatch Events에서 설정한 규칙에 따라 Lambda 함수가 주기적으로 실행됩니다. 주기적으로 실행되는 스크래핑 작업을 관리하고, 크론처럼 자동화된 데이터 수집을 할 수 있습니다.

예시: Lambda 함수 + CloudWatch Events로 주기적인 웹 스크래핑 실행

  1. Lambda 함수가 매일 한 번 실행되도록 설정할 수 있습니다.
  2. Lambda 함수에서 데이터를 S3 버킷에 저장하거나, SNS를 통해 알림을 받을 수 있습니다.
  3. Lambda 함수에서 RDS나 DynamoDB에 데이터를 저장할 수 있습니다.

5. Lambda에서 저장하기: S3 예시

웹 스크래핑한 데이터를 S3 버킷에 저장할 수도 있습니다. 예를 들어, 스크래핑한 데이터를 CSV 파일로 저장하고 S3에 업로드하는 예시입니다.

 
import requests
from bs4 import BeautifulSoup
import boto3
import csv

s3_client = boto3.client('s3')

def lambda_handler(event, context):
    url = "https://www.melon.com/chart/index.htm"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    }

    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, "html.parser")
        
        # 예시: 차트 제목과 데이터를 추출 (가상 데이터 예시)
        melon_data = [
            ["Rank", "Song Title", "Artist"],
            [1, "Song 1", "Artist 1"],
            [2, "Song 2", "Artist 2"]
        ]

        # CSV 파일로 변환
        csv_file = "/tmp/melon_data.csv"
        with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
            writer = csv.writer(file)
            writer.writerows(melon_data)
        
        # S3에 업로드
        s3_client.upload_file(csv_file, "your-bucket-name", "melon_data.csv")
        
        return {
            'statusCode': 200,
            'body': "Data successfully scraped and uploaded to S3."
        }
    else:
        return {
            'statusCode': 500,
            'body': f"Failed to retrieve data, status code: {response.status_code}"
        }
  • 위 코드에서는 웹 스크래핑한 데이터를 CSV 파일로 저장하고, 이를 S3 버킷에 업로드합니다.

6. 결론

AWS Lambda를 사용하여 웹 스크래핑을 자동화하는 방법은 매우 유용하며, 서버리스 환경에서 주기적인 작업을 처리하기에 적합합니다. Lambda와 CloudWatch Events를 활용하면 주기적으로 자동화된 데이터 수집이 가능하며, 스크래핑 결과를 S3, DynamoDB, RDS 등에 저장할 수 있습니다.

이 방법은 서버 관리를 신경 쓰지 않고도 효율적인 자동화 시스템을 구축할 수 있기 때문에 현업에서 많이 사용됩니다.

'프로젝트' 카테고리의 다른 글

Chapter 3 Kream 크롤링, 웹스크래핑 프로젝트  (0) 2025.04.16
Chapter 2 네이버 동적 스크랩핑,크롤러 프로젝트  (0) 2025.04.15
프로젝트 준비(네이버 API와 부동산 관련 데이터)  (0) 2025.04.15
Chapter 1 네이버 정적 스크랩핑,크롤러 프로젝트  (0) 2025.04.14
16강 미니 프로젝트(사진 공유 웹사이트)_4 (AWS)  (0) 2025.04.11
'프로젝트' 카테고리의 다른 글
  • Chapter 3 Kream 크롤링, 웹스크래핑 프로젝트
  • Chapter 2 네이버 동적 스크랩핑,크롤러 프로젝트
  • 프로젝트 준비(네이버 API와 부동산 관련 데이터)
  • Chapter 1 네이버 정적 스크랩핑,크롤러 프로젝트
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (582) N
      • Python (31)
      • 프로젝트 (43)
      • 과제 (25)
      • Database (40)
      • 멘토링 (10)
      • 특강 (26)
      • 기술블로그 (196) N
      • AI 분석 (3)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (58)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
프로젝트 준비(자동화 스크랩핑)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.