본문 바로가기
python

[크롤링] 웹 크롤링 kbs 뉴스 데이터로 직접 해보자! (Selenium 활용) + 다음페이지 이동기능 및 RSS

by 포 키 2024. 3. 11.
728x90

이전 포스팅에서는 한 페이지에 대한 오늘 날짜의 뉴스를 긁어오는 것을 해봤다.

이번 포스팅에서는 오늘 날짜의 모든 페이지의 뉴스를 긁어오는 것을 해보려 한다.

2024.03.11 - [python] - [크롤링] 웹 크롤링 kbs 뉴스 데이터로 직접 해보자! (Selenium 활용) + Trouble Shooting

 

[크롤링] 웹 크롤링 kbs 뉴스 데이터로 직접 해보자! (Selenium 활용) + Trouble Shooting

이번 시간은 지난 포스팅 beautifulsoup을 활용하지 못했던 것을 이어 selenium으로 해보는 것을 이어서 작성하겠다. 2024.03.11 - [python] - [크롤링] 웹 크롤링 kbs 뉴스 데이터로 직접 해보자! (Beautifulsoup

forky-develop.tistory.com

 

 

 

페이지네이션

 

페이지네이션 개념 이해하기

 

페이지네이션이란 1번째 페이지부터 원하는 n번째 페이지까지 모두 돌면서 원하는 내용을 수집할 수 있는 것을 말한다.

앞서 계속 사용했던 for 반복문을 통해 사용하는데, 앞전에는 사용하지 않은 range 기능을 사용해볼 것이다.

range 코드는 위의 사진에서 보이다 싶이 활용을 해야하며, (1, 14)는 1부터 13까지를 의미한다.

즉, 앞의 값부터 뒤의 값 이전까지를 나타내는 것으로 헷갈리지 않게 주의하자.

 

 

최종 코드

 

최종적으로 우리는 모든 코드들이 각 페이지별로 반복문이 돌아가도록 코드를 구현해야한다.

강의에서는 해당 일자에 13페이지만 있었지만, 오늘자로 31페이지의 뉴스가 존재했기에 나는 모두 크롤링해보는 것을 목표로 정했다.

강의에서는 맥을 사용해서 빠른건지 아니면 나는 강의를 돌리면서 여러 페이지들도 함께 띄운 상태에서 코드를 진행해서 그런지 한페이지를 크롤링하고 닫고 대기하는 시간이 너무 길게 나오더라.

강의와 코드를 다르게 설정한 부분은 없었기에 세팅의 문제는 아니고 사양이나 환경의 문제같다.

 

여기까지가 여러 페이지를 자동화해서 크롤링하는 내용이다.

 

RSS

 

RSS란 웹 사이트에서 컨텐츠를 사용자에게 쉽게 배포하기 위한 표준 포맷으로, 이를 사용하면 사용자는 해당 웹 사이트를 방문하지 않아도 해당 사이트의 업데이트된 내용을 확인할 수 있어서 크롤링보다 조금 쉬운 개념이라고 알면 된다.

 

RSS VS Crawling

RSS는 사용자가 관심있는 웹 사이트의 업데이트를 받아보고자 할 때 사용한다.

Crawling은 웹 사이트의 데이터를 자동으로 수집하고 분석하기 위해 사용한다.

따라서 목적과 방법에는 차이가 있지만 웹 콘텐츠를 가져오는 방법으로 사용한다.

 

 

feedparser

 

feedparser를 활용해서 sbs의 RSS 링크를 가져와 확인해봤다.

강의에서는 vs code에서 길어도 스크롤 기능으로 해서 모두 나왔는데 나는 중간부분이 생략되어 나와서 잠시 당황했다.

아래에 output 설정하는 부분에서 스크롤 ~~ 이라고 적힌 것을 클릭해주니 강의에서처럼 동일하게 나왔다.

혹시 다르게 나오는 사람들은 아래에 output 설정을 꼭 확인해보길!

 

 

entry

 

위에서 확인해본 피드 항목들을 순회하며 정보를 출력해보자.

entry 변수를 생성해서 각 제목, 링크, 날짜, 요약까지 모두 for 반복문을 통해 피드별로 나눠야 한다.

\n을 타이틀 앞에 작성한 이유는 모든 결과값이 붙어 나오기 때문에 다른 피드 내용을 구별하기 위함이다.

# 피드 항목들을 순회하며 정보 출력
for entry in feed.entries:
    print('\nTitle :', entry.title)
    print('url :', entry.link)
    print('Date :', entry.published)
    print('Summary :', entry.summary)

 

 

리스트에 추가하기

 

앞서 엔트리 변수를 사용해서 각 피드별로 데이터를 먼저 저장했고,

이 저장한 데이터들을 각각에 맞는 리스트에 추가할 수 있도록 append를 꼭 해줘야 한다.

이 부분들은 이미 앞에서부터 계속해서 반복해왔기 때문에 어려운 부분이 아니라 생각해 길게 설명하지 않겠다.

# 빈 리스트 정의
url_list = []
title_list = []
summary_list = []
date_list = []

# feed entries 순회하면서 리스트에 값 추가
for entry in feed.entries:
    url_list.append(entry.link)
    title_list.append(entry.title)
    summary_list.append(entry.summary)
    date_list.append(entry.published)

 

 

데이터 저장하기

 

다음으로 해야할 부분은 방금전에 했던 각 피드별로 엔트리 순환으로 리스트를 확장시켜 얻은 데이터를 pandas를 활용해서 데이터 프레임으로 생성하고, 이 데이터 프레임을 가지고 csv 파일로 다시 변환하는 과정을 거쳐야한다.

해당 크롤링 강의를 처음부터 들은 사람이거나 내 포스팅을 처음부터 계속 참고한 사람이라면 이 과정이 이제 익숙하다못해 너무 쉬울 것이라 예상한다. ㅋㅋㅋ

data = {'뉴스 url' : url_list, '제목' : title_list, '내용요약' : summary_list, '날짜' : date_list}
df = pd.DataFrame(data)
df.to_csv('news_sbs_rss.csv', index = False)

 

 

최종 확인

 

강의처럼 정리된 피드별 내용을 통해 기사의 링크와 제목, 내용 요약을 깔끔하게 정리된 것을 확인해볼 수 있다.

해당 부분은 크롤링은 아니고, RSS이기 때문에 해당 사이트의 업데이트된 내용을 확인하는 것을 목표로 하고 있다는 것을 헷갈리지 않게 주의해야한다.

RSS이기 때문에 내용요약으로 예시로 가져온 현재 정치적 이슈에 대한 부분을 제목과 함께 알아보기 쉽게 정리된 것이다.

 

 

728x90