위키피디아에서 조사한 데이터를 이메일로 보내기
이번 과제는 주요 역사적 사건
의 날짜 정보를 위키피디아
에서 크롤링한 후, 역사적 사건과 날짜 정보를 담은 CSV 파일
을 이메일로 첨부해 전송하는 것입니다.
이와 같은 프로그램이 작동하는 원리를 이해하면 대규모의 데이터를 크롤링하고, 이를 다양한 형태로 가공하여 이메일 전달하도록 활용 사례를 넓힐 수 있습니다.
크롤링 결과 CSV로 변환하기
먼저 크롤링한 결과를 CSV
로 변환하는 과정을 살펴보겠습니다.
1. 필요한 라이브러리 불러오기
정적 웹 크롤링을 위한 라이브러리 가 져오기
import pandas as pd
import requests
from bs4 import BeautifulSoup
-
pandas : 데이터를 읽고 처리하는 데 사용하는 라이브러리입니다. 주로
엑셀
및CSV
파일을 다룹니다. -
requests : 웹 페이지에
요청
을 보내고응답
을 받기 위해 사용하는 라이브러리입니다. -
BeautifulSoup : 웹 페이지의
HTML 코드
를 분석하고 원하는 정보를 추출하는 라이브러리입니다.
2. 엑셀 파일 읽기
read_excel로 엑셀 파일 읽기
df = pd.read_excel('input_file.xlsx')
-
file_url : 엑셀 파일 경로입니다. 이 파일에는 역사적 사건에 대한
번호
와이름
이 저장되어 있습니다. -
pd.read_excel : pandas의
read_excel
함수를 사용해 엑셀 파일을 데이터프레임 형태로 읽어옵니다.
3. 위키피디아에서 날짜 정보 추출하는 함수 만들기
위키피디아에서 날짜 정보 추출하는 함수
def extract_date(event_name):
# 위키피디아 페이지 URL
url = base_url + event_name
# 웹 페이지 요청
response = requests.get(url)
# 요청이 성공한 경우
if response.status_code == 200:
# HTML 파싱
soup = BeautifulSoup(response.content, 'html.parser')
# 날짜 정보가 있는 경우 주로 infobox에 존재한다고 가정
infobox = soup.find('table', {'class': 'infobox'})
# infobox에서 '날짜' 항목 찾기
if infobox:
# '날짜' 항목이 있는지 확인
date_tag = infobox.find('th', string='날짜')
# '날짜' 항목이 있는 경우
if date_tag:
# '날짜' 항목의 다음 형제 태그에서 날짜 정보 추출
date_value = date_tag.find_next_sibling('td')
# 날짜 정보가 있는 경우
if date_value:
# 날짜 정보 반환
return date_value.text.strip()
# 날짜 정보가 없는 경우
return '날짜 정보 없음'
# 웹페이지 요청이 실패한 경우
else:
return '페이지 오류'
-
requests.get : 주어진 URL로 웹 요청을 보내고 응답을 받습니다.
-
BeautifulSoup : 응답 받은 HTML 코드를 분석합니다.
-
infobox : 사건의 정보가 담긴 표(table)를 찾아 그 안에서 '날짜'라는 항목을 찾아 값을 반환합니다.
-
return : 날짜를 찾지 못하면 '날짜 정보 없음', 페이지가 로드되지 않으면 '페이지 오류'라는 메시지를 반환합니다.