웹 크롤링 파이썬으로 하는 3가지 방법 (requests, Beautiful Soup, Selenium)

 

파이썬으로 데이터 분석도 많이 하지만 웹 크롤링을 통해서도 많이 코딩을 합니다.  특히나,  웹 크롤링은 써먹을 때가 많습니다.
웹 크롤링은 웹 사이트에서 데이터를 자동으로 추출하는 기술입니다. 검색 엔진, 가격 비교 사이트, 뉴스 애그리게이터 등 다양한 응용 프로그램에 사용됩니다.
파이썬은 웹 크롤링에 유용한 여러 라이브러리를 제공하여 웹 개발자와 데이터 과학자들에게 인기 있는 언어입니다.

본 가이드에서는 파이썬으로 웹 크롤링 하는 방법을 자세히 설명합니다.

  • 크롤링 프로세스 이해: 크롤링 프로세스의 단계와 각 단계에서 수행되는 작업에 대해 알아봅니다.
  • 요구 사항 준비: 크롤링에 필요한 라이브러리, 도구 및 환경을 설치합니다.
  • 요청 보내기: requests 라이브러리를 사용하여 웹 서버에 요청을 보내고 응답을 받는 방법을 학습합니다.
  • HTML 파싱: Beautiful Soup 라이브러리를 사용하여 HTML 문서를 파싱하고 원하는 데이터를 추출하는 방법을 학습합니다.
  • 데이터 처리: 추출된 데이터를 정제하고 저장하는 방법을 학습합니다.
  • 고급 주제: JavaScript를 사용하는 웹 페이지 크롤링, 오류 처리, 프록시 사용 등 고급 주제를 다룹니다.

1. 크롤링 프로세스 이해

웹 크롤링 프로세스는 다음 단계로 구성됩니다.

  1. 목표 설정: 크롤링할 웹 사이트와 추출하려는 데이터를 명확히 정의합니다.
  2. 요청 보내기: 웹 서버에 요청을 보내고 HTML 문서를 포함하는 응답을 받습니다.
  3. HTML 파싱: HTML 문서를 구조화된 데이터로 파싱합니다.
  4. 데이터 추출: 원하는 데이터를 HTML 문서에서 추출합니다.
  5. 데이터 처리: 추출된 데이터를 정제하고 저장합니다.

2. 요구 사항 준비

필요한 라이브러리 설치:

  • requests: 웹 서버에 요청을 보내고 응답을 받는 데 사용됩니다.
  • Beautiful Soup: HTML 문서를 파싱하고 원하는 데이터를 추출하는 데 사용됩니다.
  • (선택 사항) Selenium: JavaScript를 사용하는 웹 페이지를 크롤링하는 데 사용됩니다.

설치 방법:

pip install requests beautifulsoup4 [selenium]

 

3. 요청 보내기

requests 라이브러리 사용:

  • requests.get() 함수를 사용하여 웹 서버에 GET 요청을 보냅니다.
  • requests.post() 함수를 사용하여 웹 서버에 POST 요청을 보냅니다.
  • response.status_code 속성을 사용하여 요청 응답의 상태 코드를 확인합니다.
  • response.content 속성을 사용하여 응답 본문을 가져옵니다.

예제:

Python
import requests

# 네이버 뉴스 검색 URL
url = "https://search.naver.com/search.naver?where=news&query=파이썬"

# URL 요청 및 응답 받기
response = requests.get(url)

# 응답 상태 코드 확인
if response.status_code == 200:
    # 응답 본문 출력
    print(response.content.decode('utf-8'))
else:
    print("요청 오류:", response.status_code)

4. HTML 파싱

Beautiful Soup 라이브러리 사용:

  • BeautifulSoup() 함수를 사용하여 HTML 문서를 파싱합니다.– 파싱: *프로그래밍 언어로 짠 코드를 실행하거나, 프로그램으로 변환시키 위해서는 어휘 분석(lexing) 또는 토큰화(tokenize)를 통해 키워드, 식별자(Identifier), 연산자(Operator) 및
    리터럴(Literal) 같은 개별 토큰으로 변환한다. 이후 이 코드가 프로그래밍 언어의 문법에 맞는지 확인하는 과정을 파싱(parsing)이라고 한다.
  • find() 함수, find_all() 함수, select() 함수 등을 사용하여 원하는 HTML 요소를 찾습니다.
  • text 속성을 사용하여 HTML 요소의 텍스트 콘텐츠를 추출합니다.
  • attrs 속성을 사용하여 HTML 요소의 속성 값을 추출합니다.

예제:

Python
from bs4 import BeautifulSoup

# HTML 문서 파싱
soup = BeautifulSoup(response.content

5. 데이터 추출

Beautiful Soup를 사용한 데이터 추출:

  • 추출하려는 데이터가 포함된 HTML 요소를 찾습니다.
  • text 속성을 사용하여 텍스트 콘텐츠를 추출합니다.
  • attrs 속성을 사용하여 속성 값을 추출합니다.

예제:

Python
# 뉴스 기사 제목 추출
news_titles = soup.find_all('a', class_='news_tit')
for news_title in news_titles:
    print(news_title.text)

# 뉴스 기사 링크 추출
news_links = [news_title['href'] for news_title in news_titles]
for news_link in news_links:
    print(news_link)

 

예제:

Python
# 뉴스 기사 제목 추출 (XPath)
news_titles = soup.find_all('a', attrs={'class': 'news_tit'})
for news_title in news_titles:
    print(news_title.text)

# 뉴스 기사 요약 추출 (XPath)
news_summaries = soup.find_all('p', attrs={'class': 'news_dsc'})
for news_summary in news_summaries:
    print(news_summary.text)

6. 데이터 처리

  • 데이터 정제:
    • 불필요한 공백, 문자 제거
    • 특수 문자 처리
    • HTML 태그 제거
    • 데이터 형식 변환
  • 데이터 저장:
    • CSV 파일, JSON 파일, 데이터베이스 등에 저장

예제:

Python
import csv

# CSV 파일에 저장
with open('news_data.csv', 'w', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['제목', '링크', '요약'])
    for news_title, news_link, news_summary in zip(news_titles, news_links, news_summaries):
        writer.writerow([news_title, news_link, news_summary])

7. 고급 주제

JavaScript를 사용하는 웹 페이지 크롤링:

  • Selenium 라이브러리를 사용하여 웹 브라우저를 자동으로 제어하고 JavaScript를 실행합니다.
  • AJAX 요청을 처리하고 동적으로 로드되는 데이터를 추출합니다.

오류 처리:

  • 예외 처리를 사용하여 예상치 못한 오류를 처리합니다.
  • HTTP 상태 코드를 확인하여 요청 오류를 감지합니다.
  • 재시도 전략을 사용하여 요청 실패를 처리합니다.

프록시 사용:

  • 프록시 서버를 사용하여 IP 주소를 숨기고 크롤링 제한을 우회합니다.

API 사용:

  • 일부 웹 사이트는 데이터 추출을 위한 API를 제공합니다. API를 사용하면 더 쉽고 효율적으로 데이터를 얻을 수 있습니다.

8. 마무리

파이썬은 웹 크롤링을 수행하는 데 강력하고 유연한 도구입니다. requests, Beautiful Soup, Selenium과 같은 다양한 라이브러리를 활용하여 다양한 웹 사이트에서 데이터를 추출할 수 있습니다.

본 가이드에서 소개한 내용을 바탕으로 실제 웹 크롤링 프로젝트를 진행해 보시고, 필요에 따라 더 많은 정보를 검색하시기 바랍니다.

주의: 웹 크롤링은 웹사이트 운영자의 동의 없이 진행해서는 안 됩니다. 대부분의 웹사이트에는 robots.txt 파일이 있어 크롤링이 허용되는지 여부를 확인할 수 있습니다. 또한, 웹 크롤링은 웹사이트에 과도한 부하를 줄 수 있으므로, 너무 많은 요청을 보내지 않도록 주의해야 합니다. 마지막으로, 웹 크롤링을 통해 얻은 데이터는 개인정보 보호법 등을 준수하여 사용해야 합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다