[파이썬] 웹 스크래핑과 음식 배달 정보 추출

개요

웹 스크래핑은 웹 페이지에서 데이터를 추출하는 프로세스를 의미합니다. 음식 배달 서비스에서는 웹 스크래핑을 통해 식당 메뉴, 가격, 리뷰 등의 정보를 추출하여 고객들에게 제공합니다. 이 글에서는 Python을 사용하여 웹 스크래핑을 통해 음식 배달 정보를 추출하는 방법에 대해 알아보겠습니다.

라이브러리 설치

웹 스크래핑을 위해 다음과 같은 Python 라이브러리를 설치해야 합니다.

pip 명령어를 사용하여 라이브러리를 설치해주세요.

pip install beautifulsoup4 requests

BeautifulSoup으로 웹 페이지 파싱하기

Python의 BeautifulSoup 라이브러리를 사용하여 웹 페이지를 파싱합니다. 아래 예제는 음식 배달 서비스에서 식당 메뉴 정보를 추출하는 과정을 보여줍니다.

import requests
from bs4 import BeautifulSoup

# 웹 페이지 요청 보내기
url = "https://www.deliveryservice.com/menu"
response = requests.get(url)

# 응답 받은 HTML 파싱하기
soup = BeautifulSoup(response.text, "html.parser")

# 메뉴 정보 추출하기
menu_items = soup.find_all("div", class_="menu-item")

for item in menu_items:
    name = item.find("h3").text
    price = item.find("span", class_="price").text
    description = item.find("p", class_="description").text
    
    print(f"메뉴: {name}\n가격: {price}\n설명: {description}\n")

위 코드에서는 requests 라이브러리를 사용하여 웹 페이지에 HTTP 요청을 보내고, BeautifulSoup 객체를 사용하여 응답 받은 HTML을 파싱합니다. find_all 메서드를 사용하여 메뉴 아이템들을 추출하고, 각 아이템에서 필요한 정보를 찾아 출력합니다.

데이터 저장하기

추출한 음식 배달 정보를 필요에 따라 데이터베이스에 저장하고, 나중에 분석이나 가공에 활용할 수 있습니다. 데이터 저장에는 Python 라이브러리 중 하나인 sqlite3를 사용할 수 있습니다.

import sqlite3

# SQLite 데이터베이스 연결
conn = sqlite3.connect("delivery.db")
cursor = conn.cursor()

# 테이블 생성
cursor.execute("""
    CREATE TABLE IF NOT EXISTS menu (
        name TEXT,
        price TEXT,
        description TEXT
    )
""")

# 데이터 저장
for item in menu_items:
    name = item.find("h3").text
    price = item.find("span", class_="price").text
    description = item.find("p", class_="description").text
    
    cursor.execute("INSERT INTO menu VALUES (?, ?, ?)", (name, price, description))

# 변경사항 저장
conn.commit()

# 연결 종료
conn.close()

위 코드에서는 sqlite3 라이브러리를 사용하여 SQLite 데이터베이스를 연결하고, menu 테이블을 생성합니다. 그리고 INSERT INTO 문을 사용하여 데이터를 저장합니다.

결론

Python을 사용하여 웹 스크래핑을 통해 음식 배달 정보를 추출하는 방법에 대해 알아보았습니다. BeautifulSoup 라이브러리를 활용하여 웹 페이지를 파싱하고, 필요한 데이터를 추출할 수 있었습니다. 또한, 데이터를 저장하는 방법에 대해서도 알아보았습니다. 이를 활용하여 음식 배달 서비스에 유용한 기능을 추가할 수 있을 것입니다.