네이버 댓글을 자동 수집하는 프로그램을 만들어보려고합니다.
글의 맨 하단에 전체 코드 적어놨습니다.
코드만 필요하신분은 하단으로 내려가서 코드를 참고하시길 바랍니다.
해당 코드의 크롬 드라이버 자동 업데이트 부분과 네이버 자동 로그인의 경우 하기 URL 참고 하시면 되겠습니다.
https://nanjang12.tistory.com/2
셀레니움 - 크롬드라이버 자동 업데이트
준비물 1. 크롬 2. 파이썬 Chorme 드라이버 버전 확인 셀레니움을 이용하기 위해서는 chrome_driver 필요합니다. chrome_driver를 이용하기 위해서는 chrome 브라우저의 버전과 chrome_driver의 버전이 동일해야
nanjang12.tistory.com
https://nanjang12.tistory.com/5
셀레니움 - 네이버 자동 로그인
셀레니움은 ID, Class 이름을 통해 Element를 찾고 Click 이벤트 등을 통해 자동화를 구현할 수 있음. 1. 네이버 창을 접속 2. 화살표 버튼 클릭 3. NAVER 로그인을 클릭 후 나오는 Class를 확인 4.아이디 입
nanjang12.tistory.com
먼저 크롤링에서 중요한 것은 데이터를 어디서 뽑느냐입니다.
데이터가 나오는 URL을 찾아봅시다.
서머너즈워:천공의아레나 공식카페를 예로 들겠습니다
공식 카페 접속 후 바로 나오는 페이지에서 마우스 우클릭 → 페이지 소스 보기를 눌러줍니다.
g_ClubId에 있는 "27133272" 값이 서머너즈워 카페의 고유 값입니다.
주소 입력창에 있는 "2372592" 값은 게시글의 고유 값입니다.
이제 댓글을 수집하고 싶은 게시글로 이동해봅시다.
게시글에서 [F12] 버튼을 눌러 개발자도구를 켜준 뒤 Network 탭을 선택합니다.
게시글의 [URL 복사] 눌러줍니다.
주소창에 복사된 URL을 붙여넣기 한 후 엔터를 눌러줍시다. (개발자도구가 켜져있는 상태)
위에서 찾은 g_ClubId의 값 "27133272"을 검색해줍니다. (Ctrl + F)
해당 URL을 주소창에 입력해줍니다. (복사가 안됩니다... 복사되면 하시고 아니면 타이핑해야합니다..)
댓글의 내용이 있는 것을 확인할 수 있습니다.
이제 데이터가 있는 URL을 찾았습니다.
https://apis.naver.com/cafe-web/cafe-articleapi/v2/cafes/서머너즈워카페ID/articles/게시글번호/comments/pages/페이지번호?requestFrom=A&orderBy=asc
하기 코드의 naver_cafe_url 부분에 서머너즈워카페 ID, 게시글번호, 페이지번호를 입력할 경우 데이터가 나옵니다.
제가 작성한 코드에는 게시글번호와 페이지번호는 입력값으로 받기 때문에 서머너즈워카페ID만 코드를 수정해서 사용하시면됩니다.
이제 해당 데이터를 가공하면 됩니다.
데이터는 자기 입맛에 맞게 추출하시면 됩니다.
저는 ID, 닉네임, 댓글 내용만 파악하면 되기때문에 해당 데이터를 추출했습니다.
해당 코드를 실행시킨 뒤 게시글 번호와 페이지 번호를 입력해줍니다.
원하는 데이터가 엑셀로 정리된 것을 확인할 수 있습니다.
# 서머너즈위카페ID를 수정하여 사용
# python naver_cafe_crawling [URL] [댓글 페이지수]
from openpyxl import Workbook
from datetime import datetime
import chromedriver_autoinstaller
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pyperclip
from bs4 import BeautifulSoup
import urllib.request
import json
import re
import os
input_board = input("게시글의 번호을 입력하세요 : ")
input_page_count = input("댓글의 페이지 수를 입력하세요 : ")
os.chdir('./driver_version/')
chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0] #크롬드라이버 버전 확인
try:
driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe')
except:
chromedriver_autoinstaller.install(True)
driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe')
driver.implicitly_wait(10)
##사용할 변수 선언
#네이버 로그인 주소
url = 'https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com'
uid = 'USER_ID'
upw = 'USER_PW'
#네이버 로그인 페이지로 이동
driver.get(url)
time.sleep(2) #로딩 대기
#아이디 입력폼
tag_id = driver.find_element_by_name('id')
#패스워드 입력폼
tag_pw = driver.find_element_by_name('pw')
# id 입력
# 입력폼 클릭 -> paperclip에 선언한 uid 내용 복사 -> 붙여넣기
tag_id.click()
pyperclip.copy(uid)
tag_id.send_keys(Keys.CONTROL, 'v')
time.sleep(2)
# pw 입력
# 입력폼 클릭 -> paperclip에 선언한 upw 내용 복사 -> 붙여넣기
tag_pw.click()
pyperclip.copy(upw)
tag_pw.send_keys(Keys.CONTROL, 'v')
time.sleep(2)
#로그인 버튼 클릭
login_btn = driver.find_element_by_id('log.login')
login_btn.click()
time.sleep(2)
write_wb = Workbook()
write_ws = write_wb.active
for i in range(1,int(input_page_count)+1): # arg + 1로 설정
naver_cafe_url = "https://apis.naver.com/cafe-web/cafe-articleapi/v2/cafes/서머너즈워카페ID/articles/{0}/comments/pages/{1}?requestFrom=A&orderBy=asc".format(input_board,i)
driver.get(naver_cafe_url)
html = driver.page_source # 페이지의 elements모두 가져오기
soup = BeautifulSoup(html, 'html.parser') # BeautifulSoup사용하기
contents = soup.select_one('body > pre')
cleanr =re.compile('<.*?>')
text = re.sub(cleanr,'',str(contents))
json_data = json.loads(text)
for j in range(0,100):
num = (i-1)*100 + j
try:
items_data = json_data["result"]["comments"]["items"][j]
except IndexError:
items_data = 'no'
if items_data == 'no':
break
id_data = items_data["writer"]["id"]
nick_data = items_data["writer"]["nick"]
content_data = items_data["content"]
content_data_m = content_data.replace("\r\n"," ")
content_data_m_1 = content_data_m.replace("\n"," ")
write_ws.cell(num+1,1,id_data)
write_ws.cell(num+1,2,nick_data)
write_ws.cell(num+1,3,content_data_m_1)
now = datetime.now()
filename = now.strftime('%Y-%m-%d_%H-%M-%S')+"_댓글수집.xlsx"
os.chdir('../')
filepath = "./excel_comment/" + filename
write_wb.save(filepath)
time.sleep(5)
셀레니움 - 크롬드라이버 자동 업데이트 (0) | 2022.06.29 |
---|