본문 바로가기
파이썬

네이버 뉴스 댓글 가져오기 - 파이썬, 크롤링

by zgabriel 2024. 7. 3.
728x90

파이썬, selenium 을 사용하여 네이버 기사의 댓글을 가져오는 소스이다.

1. 네이버 기사 페이지 오픈

2. 댓글 더보기 클릭

3. 클린봇 해제 (모든 댓글을 볼 수 있도록 설정)

4. 마지막 댓글이 나올때까지 더보기 클릭

5. 기사제목, 시간, 성비, 연령대 추출

5. 댓글 추출

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

from webdriver_manager.chrome import ChromeDriverManager

import time

url = "https://news.naver.com/main/read.naver?mode=LSD&mid=shm&sid1=100&oid=015&aid=0004648342"

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

driver.implicitly_wait(30)

driver.get(url)

#댓글 더보기 클릭

btn_more = driver.find_element(By.CSS_SELECTOR, 'a.u_cbox_btn_view_comment')

btn_more.click()

#클린봇 해제하여 모든 댓글을 볼 수 있도록 설정

cleanbot = driver.find_element(By.CSS_SELECTOR, 'a.u_cbox_cleanbot_setbutton')

cleanbot.click()

time.sleep(1)

cleanbot_disable = driver.find_element(By.XPATH,"//input[@id='cleanbot_dialog_checkbox_cbox_module']")

cleanbot_disable.click()

time.sleep(1)

cleanbot_confirm = driver.find_element(By.CSS_SELECTOR, 'div.u_cbox_layer_cleanbot2_extra')

cleanbot_confirm.click()

time.sleep(1)

#더보기 클릭

while True:

try:

btn_more = driver.find_element(By.CSS_SELECTOR, 'a.u_cbox_btn_more')

btn_more.click()

time.sleep(1)

except:

break

# 기사제목 추출

article_head = driver.find_elements(By.CSS_SELECTOR, 'div.article_info > h3 > a')

print("기사 제목 : " + article_head[0].text)

# 기사시간 추출

article_time = driver.find_elements(By.CSS_SELECTOR, 'div.sponsor > span.t11')

print("기사 등록 시간 : " + article_time[0].text)

# 성비와 연령대 추출

per = driver.find_elements(By.CSS_SELECTOR, 'span.u_cbox_chart_per')

print("남자 성비 : " + per[0].text)

print("여자 성비 : " + per[1].text)

print("10대 : " + per[2].text)

print("20대 : " + per[3].text)

print("30대 : " + per[4].text)

print("40대 : " + per[5].text)

print("50대 : " + per[6].text)

print("60대 이상 : " + per[7].text)

#댓글추출

contents = driver.find_elements(By.CSS_SELECTOR, 'span.u_cbox_contents')

cnt = 1

for content in contents:

print(cnt, " : ", content.text)

cnt+=

 

 

반응형