[파이썬] Flask를 이용한 웹 크롤링 및 스크래핑

이번 포스트에서는 Python 프레임워크인 Flask를 이용하여 웹 크롤링과 스크래핑을 하는 방법에 대해 알아보겠습니다. 웹 크롤링은 인터넷 상의 웹 페이지를 추출하고 데이터를 수집하는 작업을 의미하며, 스크래핑은 수집된 데이터를 분석하여 원하는 정보를 추출하는 과정입니다.

Flask란?

Flask는 웹 개발을 위한 Python 마이크로 프레임워크로써, 가볍고 간단한 구조를 가지고 있습니다. Flask는 웹 크롤링과 스크래핑 작업을 쉽게 구현할 수 있는 기능들을 제공합니다.

필요한 라이브러리 설치하기

먼저, 웹 크롤링 및 스크래핑을 위해 필요한 라이브러리들을 설치해야 합니다. pip를 사용하여 다음과 같이 라이브러리를 설치합니다:

pip install flask
pip install requests
pip install beautifulsoup4

웹 크롤링하기

Flask를 사용하여 웹 크롤링을 하기 위해서는 requests와 BeautifulSoup 라이브러리가 필요합니다. requests는 웹 페이지를 손쉽게 요청할 수 있는 기능을 제공하고, BeautifulSoup는 HTML 페이지를 파싱하는 기능을 제공합니다.

다음은 Flask를 사용하여 웹 페이지를 크롤링하는 코드입니다:

from flask import Flask
import requests
from bs4 import BeautifulSoup

app = Flask(__name__)

@app.route('/')
def crawl_page():
    # 웹 페이지 가져오기
    url = 'https://example.com'
    response = requests.get(url)
    html = response.text
    
    # BeautifulSoup을 사용하여 HTML 파싱하기
    soup = BeautifulSoup(html, 'html.parser')
    
    # 추출한 정보 출력하기
    title = soup.title.text
    return f'Title: {title}'

if __name__ == '__main__':
    app.run()

위의 코드에서는 Flask 앱을 생성한 후, ‘/’ 경로로 접속했을 때 해당 웹 페이지를 크롤링하고 문서의 제목을 출력하도록 설정하였습니다.

스크래핑하기

이제 웹 크롤링한 페이지에서 원하는 정보를 스크래핑하는 방법을 알아보겠습니다. 예를 들어, 웹 페이지에서 모든 링크를 추출하고 출력하는 기능을 구현해보겠습니다.

from flask import Flask
import requests
from bs4 import BeautifulSoup

app = Flask(__name__)

@app.route('/')
def scrape_page():
    # 웹 페이지 가져오기
    url = 'https://example.com'
    response = requests.get(url)
    html = response.text
    
    # BeautifulSoup을 사용하여 HTML 파싱하기
    soup = BeautifulSoup(html, 'html.parser')
    
    # 모든 링크 추출하기
    links = soup.find_all('a')
    
    # 추출한 링크 출력하기
    for link in links:
        print(link['href'])
    
    return 'Scraping finished'

if __name__ == '__main__':
    app.run()

위의 코드에서는 ‘/’ 경로로 접속했을 때 웹 페이지에서 모든 링크를 추출하여 출력하도록 설정하였습니다.

마무리

이번 포스트에서는 Flask를 사용하여 웹 크롤링 및 스크래핑을 하는 방법을 알아보았습니다. Flask의 간편한 사용법과 requests, BeautifulSoup 라이브러리를 함께 활용하여 다양한 웹 크롤링 및 스크래핑 작업을 구현할 수 있습니다. Flask의 다양한 확장 기능과 함께 웹 데이터를 유용하게 사용할 수 있는 가능성을 열어보세요.