Guidelines

μΆ”μΆœν•œ 기사 데이터λ₯Ό CSV 파일둜 μ €μž₯ν•˜κΈ°

이번 μˆ˜μ—…μ—μ„œλŠ” μΆ”μΆœν•œ BBC λ‰΄μŠ€ 기사 제λͺ©μ„ CSV 파일둜 μ €μž₯ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

CSV(Comma Separated Values)λŠ” μ‰Όν‘œλ‘œ κ΅¬λΆ„λœ 데이터λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

CSV νŒŒμΌμ€ μ—‘μ…€, κ΅¬κΈ€μ‹œνŠΈμ™€ 같은 μŠ€ν”„λ ˆλ“œμ‹œνŠΈ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‰½κ²Œ μ—΄λžŒν•  수 있으며, 데이터λ₯Ό μ €μž₯ν•˜κ³  뢈러올 λ•Œ 자주 ν™œμš©λ©λ‹ˆλ‹€.


BBC μ›Ήμ‚¬μ΄νŠΈμ—μ„œ 기사 제λͺ©μ„ μΆ”μΆœν•˜λŠ” μ½”λ“œ

νŒŒμ΄μ¬μ—μ„œ 기본적으둜 μ œκ³΅ν•˜λŠ” csv λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ 데이터λ₯Ό κ°„νŽΈν•˜κ²Œ CSV ν˜•μ‹μœΌλ‘œ 처리 및 μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μΆ”μΆœν•œ 데이터λ₯Ό CSV둜 μ €μž₯
import csv from io import StringIO from bs4 import BeautifulSoup import requests # BBC λ‰΄μŠ€ ν™ˆνŽ˜μ΄μ§€μ— μš”μ²­ 보내기 url = "https://www.bbc.com/news" response = requests.get(url) # HTML 데이터 νŒŒμ‹± soup = BeautifulSoup(response.text, "html.parser") # h2 HTML νƒœκ·Έλ‘œ 기사 제λͺ© 10개 μΆ”μΆœ titles = soup.find_all('h2', limit=10) # CSV 파일둜 μ €μž₯ν•  데이터 ꡬ성 data = [] for title in titles: # 기사 제λͺ©λ§Œ μΆ”μΆœ data.append([title.text])

μœ„ μ½”λ“œλŠ” h2 HTML νƒœκ·Έλ₯Ό 가진 BBC λ‰΄μŠ€ 기사 제λͺ©μ„ μΆ”μΆœν•˜κ³ , CSV ν˜•νƒœλ‘œ 좜λ ₯ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

h2(Heading2) νƒœκ·ΈλŠ” μ›Ή νŽ˜μ΄μ§€μ—μ„œ 제λͺ©μ„ λ‚˜νƒ€λ‚΄λŠ” νƒœκ·Έλ‘œ, 인터넷 λ‰΄μŠ€ 기사 제λͺ©μ€ 주둜 h1(λŒ€μ œλͺ©), h2(μ€‘μ œλͺ©), h3(μ†Œμ œλͺ©) νƒœκ·Έλ‘œ μž‘μ„±λ©λ‹ˆλ‹€.

soup.find_all('h2', limit=10) μ½”λ“œλŠ” HTML λ°μ΄ν„°μ—μ„œ h2 νƒœκ·Έλ‘œ μž‘μ„±λœ 기사 제λͺ©μ„ μ΅œλŒ€ 10κ°œκΉŒμ§€ μΆ”μΆœν•©λ‹ˆλ‹€.


CSV 파일둜 μ €μž₯ν•˜κΈ°

CSV ν˜•μ‹μœΌλ‘œ 데이터 좜λ ₯
# StringIO 객체(λ©”λͺ¨λ¦¬μ— 파일처럼 데이터λ₯Ό μž„μ‹œ μ €μž₯) 생성 output = StringIO() # CSV 파일둜 StringIO 객체 μ €μž₯ csv_writer = csv.writer(output) # CSV에 헀더 μΆ”κ°€ csv_writer.writerow(['번호', '기사 제λͺ©']) # CSV에 λ²ˆν˜Έμ™€ 기사 제λͺ© μΆ”κ°€ for idx, title in enumerate(titles, 1): csv_writer.writerow([idx, title.text.strip()]) # CSV ν˜•μ‹μ˜ κ²°κ³Ό 좜λ ₯ print(output.getvalue()) # StringIO 객체 λ‹«κΈ° output.close()

StringIO κ°μ²΄λŠ” λ©”λͺ¨λ¦¬μ— 데이터λ₯Ό μž„μ‹œ μ €μž₯ν•  수 μžˆλŠ” κ°μ²΄μž…λ‹ˆλ‹€.

csv.writer둜 CSV νŒŒμΌμ„ μž‘μ„±ν•˜κ³ , csv_writer.writerow()둜 헀더와 데이터λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ output.getvalue()둜 CSV ν˜•μ‹μ˜ κ²°κ³Όλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.


이제 μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄, μΆ”μΆœν•œ BBC λ‰΄μŠ€ 기사 제λͺ©μ΄ CSV ν˜•μ‹μœΌλ‘œ 좜λ ₯λ©λ‹ˆλ‹€.

참고둜 CSV ν˜•μ‹μœΌλ‘œ ν‘œμ‹œλœ 데이터λ₯Ό 좜λ ₯ν•˜λŠ” 것이 μ•„λ‹Œ μ €μž₯ν•˜λ €λ©΄, μ•„λž˜ μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λ©΄ λ©λ‹ˆλ‹€.

CSV 파일둜 μ €μž₯
# CSV 파일둜 StringIO 객체 μ €μž₯ with open('bbc_news.csv', 'w', newline='') as f: f.write(output.getvalue())

μœ„ μ½”λ“œλŠ” 컴퓨터에 파이썬 μ‹€ν–‰ 파일이 μ‹€ν–‰λ˜λŠ” μœ„μΉ˜μ— bbc_news.csv νŒŒμΌμ„ μƒμ„±ν•˜κ³ , 데이터λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

μ‹€μŠ΅ ν™˜κ²½μ—μ„œλŠ” λ³΄μ•ˆ 문제둜 인해 파일 μ €μž₯이 μ œν•œλ©λ‹ˆλ‹€.

CSV 파일둜 λ‹€μš΄λ‘œλ“œν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‹€ν–‰ λ²„νŠΌ μ˜†μ˜ μ‹€μŠ΅ ν™˜κ²½μ˜ λ‹€μš΄λ‘œλ“œ λ²„νŠΌμ„ μ΄μš©ν•΄μ£Όμ„Έμš” :)

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result