본문 바로가기

Crawling

네이버 뉴스 댓글 크롤링_naver_news_comment_crawl

뉴스 별 댓글 반응 수집

# 저장해둔 url 불러오기

df = pd.read_csv('navernews_urls.csv')
df['url']
len(df['url'])
dict = {}

# n : 크롤링할 뉴스 갯수
n = 10      # 전체 뉴스 수 : len(df['url'])

# 페이지당 기사 수집
for i in tqdm(range(0, n)):   
    try:
        # 뉴스 크롬창 띄우기
        chrome_path = chromedriver_autoinstaller.install()
        driver = webdriver.Chrome(chrome_path)  # 윈도우 : "chromedriver.exe"
        driver.get(df['url'][i])
        time.sleep(1)

        # 기사 데이터 수집
        
        # 기사 제목
        title = driver.find_element_by_css_selector('.tts_head').text
        
        # 기사 날짜
        date = driver.find_element_by_css_selector('.t11').text
        
        # 기사 추천수 날짜
        up = int(driver.find_element_by_css_selector('.u_cnt._count').text)
        
        # 좋아요
        like = int(driver.find_element_by_css_selector(".end_btn .u_likeit_list.good .u_likeit_list_count._count").text)
      
        # 훈훈해요
        warm = int(driver.find_element_by_css_selector(".end_btn .u_likeit_list.warm .u_likeit_list_count._count").text)
        
        # 슬퍼요
        sad = int(driver.find_element_by_css_selector(".end_btn .u_likeit_list.sad .u_likeit_list_count._count").text)
        
        # 화나요
        angry = int(driver.find_element_by_css_selector(".end_btn .u_likeit_list.angry .u_likeit_list_count._count").text)
        
        # 후속기사 원해요
        want = int(driver.find_element_by_css_selector(".end_btn .u_likeit_list.want .u_likeit_list_count._count").text)

        # 기사 댓글 갯수 
        review_count = int(driver.find_element_by_css_selector(".u_cbox_count").text.replace(',', ''))

        # 더보기 클릭 횟수
        moreview_num = review_count//20

        # 댓글 버튼 클릭
        driver.find_element_by_css_selector(".lo_txt").click()
        time.sleep(1)

        # 더보기 버튼 여러번 클릭하기
        k=0
        while k <= moreview_num:  # 더보기 횟수만큼 반복 
            try:
                driver.find_element_by_css_selector(".u_cbox_page_more").click()  # 더보기 버튼 클릭
                time.sleep(1)
                k = k+1
            except:        
                break   # 에러나면 클릭 반복문을 빠져나가라

        # review 수집하기
        review_list = []
        overlays1 = ".u_cbox_text_wrap"
        reviews = driver.find_elements_by_css_selector(overlays1)
        for review in tqdm(reviews):    
            review = review.text
            review_list.append(review)

        target_info = {}
        target_info['기사명'] = title
        target_info['날짜'] = date
        target_info['기사 추천 수'] = up
        target_info['좋아요'] = like
        target_info['훈훈해요'] = warm
        target_info['슬퍼요'] = sad
        target_info['화나요'] = angry
        target_info['후속기사 원해요'] = want
        target_info['댓글 수'] = len(review_list)
        target_info['댓글'] = review_list

        dict[i] = target_info    #기사한개완료
        
        print(title, '( 댓글 수:', len(review_list),')')

        driver.close()
        time.sleep(2)
        
    except:
        driver.close()
        continue

print(len(dict))
dict

 

# 판다스로 만들기

import pandas as pd
result_df = pd.DataFrame.from_dict(dict, 'index')
result_df
# result_df.rename(columns={result_df.columns[0] : name}, inplace=True)

 

# 파일로 저장

result_df.to_excel("naver_article_({}).xlsx".format(keyword))