가이드라인

위키피디아에서 조사한 데이터를 이메일로 보내기

이번 과제는 주요 역사적 사건의 날짜 정보를 위키피디아에서 크롤링한 후, 역사적 사건과 날짜 정보를 담은 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 : 날짜를 찾지 못하면 '날짜 정보 없음', 페이지가 로드되지 않으면 '페이지 오류'라는 메시지를 반환합니다.


4단계: 데이터프레임에 함수 적용하기

날짜 정보 추출
df['날짜'] = df['역사적사건'].apply(extract_date)
  • df['역사적사건']: 엑셀 파일에서 읽어온 '역사적사건' 열입니다. 각 사건의 이름을 의미합니다.

  • apply(extract_date): 각 사건 이름에 대해 extract_date 함수를 적용하여 날짜를 추출하고, 그 결과를 새로운 '날짜' 열에 저장합니다.


5단계: 결과 출력하기

CSV 형식으로 크롤링 결과 출력
print(df[['역사적사건', '날짜']].to_csv(index=False))
  • df[['역사적사건', '날짜']]: '역사적사건'과 추출된 '날짜' 열만 선택합니다.

  • to_csv(index=False): 선택된 데이터를 CSV 형식으로 변환하여 출력합니다. index=False는 인덱스(데이터프레임에서 각 행의 위치를 나타내는 번호)를 제외하고 출력하라는 의미입니다.


다음 수업에서는 크롤링한 CSV 데이터를 이메일로 전송하는 방법을 알아보겠습니다.

가이드라인

AI 튜터

배포

디자인

업로드

수업 노트

즐겨찾기

도움말

코드 에디터

코드 실행
코드 생성

실행 결과

입력 데이터/결과물
input_file

결과물

문서가 비어 있습니다.

코드를 실행해보세요.