본문으로 건너뛰기
실습하기

추출한 기사 데이터를 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 파일로 다운로드하기 위해서는 실행 버튼 옆의 실습 환경의 다운로드 버튼을 이용해주세요 :)

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!