우선 과제 관련 GPT와의 모든 대화입니다. :
ChatGPT목표 : RSS피드를 Trafilatura와 Feedparser를 통해 크롤링
Step.1 묻지도 따지지도 않고 바로 GPT에게 물어보기
그러니 다음과 같은 코드를 작성해줬습니다.
import feedparser
import trafilatura
# RSS 피드 URL
rss_url = "https://www.mk.co.kr/rss/30000001/"
# RSS 피드 파싱
feed = feedparser.parse(rss_url)
# 피드에서 각 기사 정보 추출
for entry in feed.entries:
title = entry.title # 기사 제목
link = entry.link # 기사 링크
# 기사 내용 크롤링
downloaded = trafilatura.fetch_url(link)
article_text = trafilatura.extract(downloaded)
# 기사 정보 출력
print(f"Title: {title}")
print(f"Link: {link}")
print(f"Content: {article_text}")
print("\n" + "="*80 + "\n")결과물 :
Step.2 수정 : 글이 너무 줄줄줄 있습니다.. 정리를 했으면 좋을 것 같습니다.
—> Pandas를 사용하여 정리하고 csv파일로 저장
결과물 : 표 형식으로 정리됨. 그러나 CSV 파일은 글자가 깨져서 나옴
Step.3 수정 2 : VS CODE에는 글자가 나오나, 파일이 글자가 깨집니다.
—> CSV 파일 변환 시 문제인 것으로 보이므로, 인코딩 cp949를 해달라고 합니다.
(utf-8 시도했는데 똑같이 깨져서 나왔습니다 ㅜㅜ)
결과물 : 이제는 파일에 글자가 잘 나옴
Step.4 추가 요구 사항 : 기사가 언제 발행되었는지도 알고 싶었습니다.
결과물 : 원하던 대로 구현되었으나, 오류 발생
Step.5 오류 수정(반복)
이후는 코드를 실행하고, 오류를 수정하는 것의 반복이었습니다.
그리하여 최종적으로는 아래와 같이 작성하였습니다.
최종 코드
import feedparser
import trafilatura
import pandas as pd
def remove_special_chars(text):
"""특수 문자를 제거하는 함수"""
return text.encode('cp949', 'ignore').decode('cp949')
# RSS 피드 URL
rss_url = "https://www.mk.co.kr/rss/30000001/"
try:
# RSS 피드 파싱
feed = feedparser.parse(rss_url)
# 기사 정보를 저장할 리스트
articles = []
# 피드에서 각 기사 정보 추출
for entry in feed.entries:
title = entry.title # 기사 제목
link = entry.link # 기사 링크
published = entry.published # 게시 날짜
# 기사 내용 크롤링
downloaded = trafilatura.fetch_url(link)
article_text = trafilatura.extract(downloaded)
# 기사 정보를 딕셔너리로 저장
article_info = {
"Title": title,
"Link": link,
"Content": article_text,
"Posted Date": published,
}
# 리스트에 추가
articles.append(article_info)
# pandas 데이터프레임으로 변환
df = pd.DataFrame(articles)
# 데이터프레임의 모든 문자열에 특수 문자 제거 적용
df = df.apply(lambda col: col.map(remove_special_chars) if col.dtype == 'object' else col)
# CSV 파일로 저장 (cp949 인코딩 사용)
df.to_csv("articles5.csv", index=False, encoding='cp949')
# 크롤링 완료 메시지
print("[완료]")
except Exception as e:
# 예외 발생 시 크롤링 실패 메시지와 오류 내용 출력
print("[실패]")
print(f"오류 내용: {e}")#11기문과생도AI