python

웹 스크래핑 마스터하기: 종합적인 Python 튜토리얼

알세지 2024. 6. 1. 15:55
이 가이드는 Python을 사용하여 웹 크롤링을 수행하는 방법에 대한 자세한 단계별 튜토리얼을 제공합니다. 필요한 라이브러리 설치, 초기 크롤링 코드 제작, 특정 요구 사항을 처리하기 위한 코드 개선 등을 다룹니다. 원활한 실행을 보장하기 위한 강력한 오류 처리 기술을 사용하여 특정 HTML 요소에서 데이터를 추출하고 처리하는 데 중점을 둡니다. 튜토리얼은 타겟 웹 페이지에서 텍스트를 스크랩하고 일반적인 문제를 처리하는 방법을 보여주는 실제 예제로 마무리됩니다.

1. 필요한 라이브러리 설치

웹 크롤링을 위해 다음 라이브러리를 설치해야 합니다.

pip install requests
pip install beautifulsoup4

2. 크롤링 코드 작성

다음은 주어진 웹 페이지에서 첫 번째 링크를 통해 해당 페이지의 p 태그 텍스트를 수집하는 파이썬 코드입니다.

import requests
from bs4 import BeautifulSoup

# 시작 페이지 URL
start_url = 'https://theminjoo.kr/main/sub/news/list.php?brd=230'

# 시작 페이지 요청
response = requests.get(start_url)
response.raise_for_status()
soup = BeautifulSoup(response.content, 'html.parser')

# 첫 번째 링크 추출
container = soup.select_one('#container > div.article-body > div > div.board-list__wrap')
first_link_tag = container.select_one('div.board-list > div:nth-child(1) a')

# 추출한 링크 확인 및 절대 경로로 변환
if first_link_tag and 'href' in first_link_tag.attrs:
    first_link = first_link_tag['href']
    if first_link.startswith('http'):
        full_link = first_link
    elif first_link.startswith('/'):
        full_link = 'https://theminjoo.kr' + first_link
    else:
        full_link = 'https://theminjoo.kr/main/sub/news/' + first_link.lstrip('./')
    print(f'First link: {full_link}')

    # 첫 번째 링크 페이지 요청
    page_response = requests.get(full_link)
    page_response.raise_for_status()
    page_soup = BeautifulSoup(page_response.content, 'html.parser')

    # 좁혀진 선택자 범위 내에서 p 태그 텍스트 추출
    specific_container = page_soup.select_one('#container > div.article-body > div > div.board-view__wrap > div.board-view > div.board-view__body')
    if specific_container:
        p_tags = specific_container.find_all('p')
        p_texts = [p.get_text() for p in p_tags]

        # 결과 출력
        for text in p_texts:
            print(text)
    else:
        print('지정된 선택자 범위 내에 내용이 없습니다.')
else:
    print('첫 번째 링크를 찾을 수 없습니다.')

3. 중요한 부분과 에러 체크

  • 첫 번째 링크 추출
    • first_link_tag에서 href 속성을 추출하여 링크를 확인합니다.
    • 링크가 절대 경로인지, 상대 경로인지 확인하고 절대 경로로 변환합니다.
  • 에러 처리
    • requests.get(full_link)response.raise_for_status()를 통해 HTTP 오류를 처리합니다.
    • 링크가 상대 경로일 경우, ./ 또는 /로 시작하는지 확인하여 올바른 절대 경로로 변환합니다.
    • 특정 선택자 범위 내에 데이터가 없는 경우를 처리합니다.
  • 좁혀진 선택자 범위 내의 p 태그 추출
    • #container > div.article-body > div > div.board-view__wrap > div.board-view > div.board-view__body 선택자 내의 p 태그를 추출합니다.

#웹스크래핑

#파이썬프로그래밍

#데이터과학

#코딩튜토리얼

#웹 크롤링