본문 바로가기
Dev DBAN/개발 이야기

파이썬으로 네이버 카페 게시글 크롤링

by 디반 2021. 6. 15. 12:42
반응형

 

이번에 배틀그라운드 모바일을 플레이하는 유저들의 실시간 반응을 얻기 위해 공식 카페에 있는 유저들의 반응들을 한 번 셀레니움을 이용해서 모아보았습니다. 

이에 대한 정보를 찾기 위해 구글에 "파이썬 셀레니움 네이버 카페 크롤링"를 검색해 나온 결과들을 종합해서 저만의 코드로 짜보았습니다. 

기초적인 부분들은 어느정도 이해가 되었지만 이 내용을 가지고 이제 네이버 카페가 아닌 다른 웹사이트에서 활용을 할 수 있어야되는데 그게 현재 안되는 것 같네요.. 

자세한 코드 분석은 다음 포스팅에서 이야기하도록 하겠습니다. 

그럼 코드를 확인해보겠습니다. 

import chromedriver_autoinstaller
import time
from selenium import webdriver
from bs4 import BeautifulSoup as bs
import csv


#카페 게시글 제목,링크를 저장하는 리스트 생성
total_list = ['제목', '링크']

#데이터를 저장하는 csv파일 생성
f = open('craw.csv', 'w', encoding="euc-kr", newline='')
wr = csv.writer(f)
wr.writerow([total_list[0], total_list[1]])
f.close()


# 변수 기본값 지정
url = 'https://nid.naver.com/nidlogin.login'
id = "네이버아이디"
pw = "네이버비밀번호"


# 크롬 드라이버는 이렇게 실행해야지 편하게 작업이 가능합니다. 
# 자동으로 크롬 버전을 확인하는 코드chromedriver_autoinstaller
dir_driver = chromedriver_autoinstaller.get_chrome_version().split('.')[0]
driver = webdriver.Chrome(f'./{dir_driver}/chromedriver.exe')
driver.get(url)

driver.implicitly_wait(2) 


# execute_script 함수 사용하여 자바스크립트로 id,pw 넘겨주기
driver.execute_script("document.getElementsByName('id')[0].value=\'" + id + "\'")
driver.execute_script("document.getElementsByName('pw')[0].value=\'" + pw + "\'")

# 로그인 버튼 클릭하기
driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/input').click()
time.sleep(1)

# 로그인 정보 저장안함 클릭하기
# login_btn = driver.find_element_by_id('new.dontsave')
# login_btn.click()
# time.sleep(1)

# 내가 검색하려는 카페 주소 입력하기
baseurl = 'https://cafe.naver.com/battlegroundsmobile/'
driver.get(baseurl)

# &search.menuid = : 게시판 번호
# &search.page = : 데이터 수집 할 페이지 번호
# &userDisplay = 50 : 한 페이지에 보여질 게시글 수

clubid = 카페 클럽 ID 번호 입력
menuid = 메뉴 ID 번호 입력
pageNum = 1
userDisplay = 50

driver.get(
    baseurl + 'ArticleList.nhn?search.clubid=' + str(clubid) + '&search.menuid=' + str(menuid) + '&search.page=' + str(
        pageNum) + '&userDisplay=' + str(userDisplay))
        
# iframe으로 접근
driver.switch_to.frame('cafe_main') 


soup = bs(driver.page_source, 'html.parser')

print(str(soup))

soup = soup.find_all(class_='article-board m-tcol-c')[1]

# 네이버 카페 구조 확인후 게시글 내용만 가저오기

# datas = soup.find_all('td', class_ = 'td_article')

datas = soup.find_all(class_='td_article')
dates = soup.find_all(class_='td_date')



for data in datas:
    article_title = data.find(class_='article')
    link = article_title.get('href')
    article_title = article_title.get_text().strip()

    print(article_title)
    print(baseurl + link)

	# 인코딩은 utf-8이 좋아 보임
    
    f = open('craw.csv', 'a+', newline='',encoding='utf-8') 
   
    wr = csv.writer(f)
    wr.writerow([article_title, baseurl + link])
    f.close()

print('종료')


# driver.close()

 

실행 결과 값

 

반응형

댓글


"); wcs_do();