Python 웹 스크래핑: BeautifulSoup과 Scrapy

Python 웹 스크래핑: BeautifulSoup과 Scrapy


목차

  1. 서론
  2. 웹 스크래핑이란?
  3. BeautifulSoup 사용하기
    1. BeautifulSoup 설치
    2. HTML 파싱 및 데이터 추출
    3. 실습 예제: 뉴스 타이틀 가져오기
  4. Scrapy 사용하기
    1. Scrapy 설치
    2. Scrapy 프로젝트 생성
    3. Scrapy 스파이더 작성
    4. 실습 예제: 블로그 포스팅 정보 가져오기
  5. 마무리
  6. 추천 태그

1. 서론

웹 스크래핑은 웹 페이지에서 데이터를 추출하는 기술로, 다양한 애플리케이션에 활용될 수 있습니다. Python은 웹 스크래핑을 쉽게 수행할 수 있는 여러 라이브러리를 제공하는데, 그 중에서도 BeautifulSoup과 Scrapy가 대표적입니다. 이번 포스팅에서는 BeautifulSoup과 Scrapy를 사용하여 웹 스크래핑을 수행하는 방법을 초보 개발자도 쉽게 이해할 수 있도록 설명하겠습니다.


2. 웹 스크래핑이란?

웹 스크래핑은 웹 페이지의 HTML을 분석하여 필요한 데이터를 추출하는 과정입니다. 이를 통해 다양한 웹 사이트에서 정보를 자동으로 수집할 수 있습니다. 웹 스크래핑을 사용하면 뉴스 기사, 제품 정보, 통계 데이터 등 다양한 정보를 효율적으로 수집할 수 있습니다.


3. BeautifulSoup 사용하기


3.1 BeautifulSoup 설치

BeautifulSoup은 HTML과 XML 문서를 파싱하기 위한 라이브러리입니다. 설치는 pip를 사용하여 간단하게 할 수 있습니다.


pip install beautifulsoup4
pip install lxml

3.2 HTML 파싱 및 데이터 추출

BeautifulSoup을 사용하여 HTML 문서를 파싱하고, 필요한 데이터를 추출하는 방법을 알아보겠습니다.


from bs4 import BeautifulSoup

html_doc = """
<html>
    <head>
        <title>Example Page</title>
    </head>
    <body>
        <h1>My First Heading</h1>
        <p class="intro">This is an example paragraph.</p>
        <p class="content">This is another paragraph.</p>
    </body>
</html>
"""

soup = BeautifulSoup(html_doc, 'lxml')

# 제목 추출
title = soup.title.string
print(title)  # 출력: Example Page

# 첫 번째 <h1> 태그 내용 추출
heading = soup.h1.string
print(heading)  # 출력: My First Heading

# 첫 번째 <p> 태그 내용 추출
intro_paragraph = soup.find('p', class_='intro').string
print(intro_paragraph)  # 출력: This is an example paragraph.

3.3 실습 예제: 뉴스 타이틀 가져오기

다음 예제에서는 특정 뉴스 웹 사이트에서 뉴스 타이틀을 가져오는 방법을 보여줍니다.


import requests
from bs4 import BeautifulSoup

# 웹 페이지 가져오기
url = 'https://example-news-site.com'
response = requests.get(url)

# HTML 파싱
soup = BeautifulSoup(response.content, 'lxml')

# 뉴스 타이틀 추출
news_titles = soup.find_all('h2', class_='news-title')
for title in news_titles:
    print(title.get_text())

4. Scrapy 사용하기


4.1 Scrapy 설치

Scrapy는 웹 스크래핑을 위한 강력한 프레임워크입니다. 설치는 pip를 사용하여 간단하게 할 수 있습니다.


pip install scrapy

4.2 Scrapy 프로젝트 생성

Scrapy 프로젝트를 생성하려면 scrapy startproject 명령어를 사용합니다.


scrapy startproject myproject
cd myproject

4.3 Scrapy 스파이더 작성

스파이더는 특정 웹 사이트를 크롤링하고 데이터를 추출하는 Scrapy 클래스입니다.


# myproject/spiders/example_spider.py
import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example"
    start_urls = [
        'https://example-blog-site.com'
    ]

    def parse(self, response):
        for post in response.css('div.post'):
            yield {
                'title': post.css('h2.title::text').get(),
                'author': post.css('span.author::text').get(),
                'date': post.css('span.date::text').get(),
            }

4.4 실습 예제: 블로그 포스팅 정보 가져오기

Scrapy를 사용하여 특정 블로그 웹 사이트에서 포스팅 정보를 가져오는 예제를 작성해보겠습니다.


# myproject/spiders/blog_spider.py
import scrapy

class BlogSpider(scrapy.Spider):
    name = "blog"
    start_urls = [
        'https://example-blog-site.com'
    ]

    def parse(self, response):
        for post in response.css('div.post'):
            yield {
                'title': post.css('h2.title::text').get(),
                'author': post.css('span.author::text').get(),
                'date': post.css('span.date::text').get(),
            }

        next_page = response.css('a.next::attr(href)').get()
        if next_page is not None:
            yield response.follow(next_page, self.parse)

위 스파이더는 블로그 페이지를 크롤링하고 각 포스팅의 제목, 작성자, 작성일을 추출하여 출력합니다.


5. 마무리

이번 포스팅에서는 Python의 BeautifulSoup과 Scrapy를 사용하여 웹 스크래핑을 수행하는 방법을 알아보았습니다. BeautifulSoup은 간단한 HTML 파싱 작업에 유용하고, Scrapy는 더 복잡한 웹 크롤링 작업에 적합합니다. 다양한 예제를 통해 웹 스크래핑의 기본 개념을 익히고, 이를 실습해보시기 바랍니다.

다음 이전