위키피디아에서 원하는 정보 가져오기
이번 수업에서는 파이썬을 사용해 위키피디아
의 '인터넷' 페이지에서 데이터를 크롤링하는 방법을 알아보겠습니다.
특히 페이지의 제목
과 본문
에서 특정 단락들을 추출하고, 한글 데이터
를 올바르게 처리하는 방법을 배웁니다.
웹 페이지 가져오기
먼저, 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 구조를 분석합니다.
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 강의를 등록해 주세요!