프로그래밍/Crawling
[WebCrawling] 네이버 뉴스 섹션 토픽 크롤링 2022.ver
seojeon9
2022. 8. 3. 01:31
이 게시글은 데이터사이언스엔지니어링_전문가 과정을 수강하며 복습을 위해 정리한 글입니다.
네이버 뉴스 크롤링 두번째 게시글입니다. 앞선 게시글을 본 후 보는 것을 추천드립니다.
이전 게시글을 통해 네이버 -> 뉴스 -> 각 섹션 url을 얻어왔을 것이다.
이번에 할 단계는 각 섹션에 있는 대표 토픽url을 크롤링해오는 것이다.
위의 화면에서 노란색 블록처리해놓은 부분이 대표 토픽(헤드라인)이다.
개발자도구로 들어가서 각 토픽들의 태그를 확인해보면 정치를 제외한 섹션들이 똑같은 화면 구성인 것을 알 수 있을 것이다.
우선 지난번에 저장해둔 섹션 url을 불러오자.
# 필요 모듈 import
from urllib.request import urlopen
import requests
import pandas as pd
from bs4 import BeautifulSoup
# 저장한 섹션별 link 파일 불러오기
#
df_menu = pd.read_csv('./crawl_data/naver_news_section.csv', index_col = 0)
df_menu.head()
각 섹션을 돌아가며 토픽 데이터를 수집하는 함수를 만들었다.
def get_topic(url, section) :
# 수집 내용 list에 저장
topic_title = []
topic_link = []
# 소스 요청해서 가져오기
headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.141 Whale/3.15.136.29 Safari/537.36"}
res = requests.get(url,headers=headers)
# 파서기 생성(bs4 객체 생성)
html = res.text
bs_obj = BeautifulSoup(html,'html.parser')
# section이 정치인 경우는 다른 태그를 추출
if section == '정치' :
topic_list = bs_obj.findAll('div',{'class':'cluster_foot_inner'})
else :
# 토픽 추출
# h2태그의 class:cluster_head_topic
topic_list = bs_obj.findAll("h2",{"class":"cluster_head_topic"})
# 최종 수집 항목을 list에 저장
# link에 기본 url 추가
base_url = 'https://news.naver.com'
# 전체 토픽 title과 link 출력
for topic in topic_list :
try :
a_t = topic.find('a')
topic_title.append(a_t.text.replace('\n',''))
topic_link.append(base_url + a_t['href'])
except :
print("에러발생")
return({"topic":topic_title,"url":topic_link, "section":section})
이제 모든 섹션에 적용하여 데이터를 추출하여 보겠다.
# 모든 섹션의 topic을 하나의 dataframe에 저장하기 위해 빈 dataframe을 생성
dict_sub={}
dict_sub['topic']=[]
dict_sub['url']=[]
dict_sub['section']=[]
topic_df = pd.DataFrame(dict_sub)
topic_df
# 섹션별 헤드라인 추출
for i in range(1,7) :
temp = pd.DataFrame(get_topic(df_menu['link'][i],df_menu['section'][i]))
topic_df = pd.concat([topic_df,temp],axis=0,ignore_index=True)
잘 추출 되었는지 확인하고 파일로 저장을 하면 된다!
# 파일로 저장
topic_df.to_csv('./crawl_data/naver_news_topic.csv')
다음 글에서는 추출된 대표 토픽 url을 통해 본 뉴스 글로 들어가 본격적인 뉴스 내용을 추출하는 방법에 대해 알아보겠다!
728x90