Guidelines

μœ„ν‚€ν”Όλ””μ•„μ—μ„œ μ‘°μ‚¬ν•œ 데이터λ₯Ό μ΄λ©”μΌλ‘œ 보내기

이번 κ³Όμ œλŠ” μ£Όμš” 역사적 μ‚¬κ±΄μ˜ λ‚ μ§œ 정보λ₯Ό μœ„ν‚€ν”Όλ””μ•„μ—μ„œ ν¬λ‘€λ§ν•œ ν›„, 역사적 사건과 λ‚ μ§œ 정보λ₯Ό 담은 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 데이터λ₯Ό μ΄λ©”μΌλ‘œ μ „μ†‘ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result

Input/Result

Output

The document is empty.

Try running the code.