본문으로 건너뛰기
실습하기

위키피디아에서 원하는 정보 가져오기

이번 수업에서는 파이썬을 사용해 위키피디아의 '인터넷' 페이지에서 데이터를 크롤링하는 방법을 알아보겠습니다.

특히 페이지의 제목본문에서 특정 단락들을 추출하고, 한글 데이터를 올바르게 처리하는 방법을 배웁니다.


웹 페이지 가져오기

먼저, requests 패키지를 사용해 위키피디아의 '인터넷' 페이지를 가져옵니다.

requests.get() 메서드를 사용해 해당 페이지의 HTML 소스를 불러옵니다.

웹 페이지 가져오기
import requests

# URL 설정
url = 'https://ko.wikipedia.org/wiki/인터넷'

# 웹 페이지 가져오기
response = requests.get(url)

# 응답 상태 코드 확인
print("status_code:", response.status_code)
  • url 변수에 크롤링할 페이지의 주소를 저장합니다.

  • requests.get(url)은 해당 URL의 HTML 소스를 가져옵니다.

  • response.status_code는 요청이 성공했는지 확인하는 데 사용됩니다. 상태 코드 200은 요청이 성공했음을 의미합니다.


HTML 파싱 및 제목 추출

HTML을 파싱하고, 페이지의 제목을 추출합니다.

BeautifulSoup을 사용해 HTML 구조를 분석합니다.

HTML 파싱 및 제목 추출
from bs4 import BeautifulSoup

# HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')

# 페이지 제목 가져오기
title = soup.find('h1', id='firstHeading').text
print("title:", title)
  • BeautifulSoup(response.text, 'html.parser')는 HTML 소스를 파싱합니다.

  • soup.find('h1', id='firstHeading').text는 페이지의 제목을 추출합니다.


본문 내용 추출

이제 본문 내용에서 <p> 태그를 모두 가져와, 그 중 첫 5개의 단락을 추출합니다.

본문 내용 추출
# 본문 내용 중 <p> 태그들 모두 가져오기
all_paragraphs = soup.find('div', class_='mw-parser-output').find_all('p')

# 첫 5개의 <p> 태그만 선택하기
paragraphs = all_paragraphs[:5]

# 추출한 단락들을 하나의 텍스트로 합치기
content = "\n".join([p.text for p in paragraphs])
  • soup.find('div', class_='mw-parser-output').find_all('p')는 본문 내 모든 <p> 태그를 가져옵니다.

  • paragraphs = all_paragraphs[:5]는 첫 5개의 <p> 태그만 선택합니다.

  • "\n".join([p.text for p in paragraphs])는 선택한 단락들을 하나의 텍스트로 합칩니다.


한글 인코딩 문제 해결 및 출력

크롤링한 한글 데이터를 제대로 출력하기 위해 인코딩(Encoding, 문자열을 바이트로 변환) 문제를 해결합니다.

한글 인코딩 문제 해결
# 한글 인코딩 문제 해결
print("content:", content.encode('utf-8').decode('utf-8'))
  • content.encode('utf-8').decode('utf-8')는 출력되는 한글 데이터가 제대로 출력되도록 합니다.

인코딩(encode)는 문자열을 바이트(byte, 0과 1로 이루어진 데이터)로 변환하고, 디코딩(decode)은 바이트를 문자열로 변환합니다.

이제 코드를 실행하면 위키피디아 '인터넷' 페이지의 제목과 본문 내용이 출력됩니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!