개발관련/Python

[python] 네이버카페 크롤링 코드

Dol42 2021. 1. 28. 21:15

python, beautifulsoup와 크롬드라이버를 사용해 네이버카페 게시물을 드래그 해서 csv파일로 만들어주는 코딩을 진행해 보았다. 

네이버 아이디와 비밀번호 입력까지 자동으로 진행 한 수 원하는 카페에서 게시물의 제목과 내용(원하는 부분)을 가지고 와서 csv로 만들어주도록 하였다. 

코드분석은 따로 진행하도록 하겠다.

 

소스코드

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


total_list = ['제목','링크'] 
f = open('craw.csv', 'w', encoding = "euc-kr", newline='')
wr = csv.writer(f)
wr.writerow([total_list[0], total_list[1]])
f.close()


#변수 기본값 지정

dir_driver = "chromedriver경로설정 "

url = 'https://nid.naver.com/nidlogin.login'
id = ""
pw = ""

driver = webdriver.Chrome(dir_driver)
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/카페이름/'
driver.get(baseurl)

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

clubid = 주소의 clubid
menuid = 주소의 menuid
pageNum = 1
userDisplay = 50

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

soup = bs(driver.page_source ,'html.parser')
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')
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)

    f = open('craw.csv', 'a+', newline='', encoding = "euc-kr")# 문자 인코딩 -> euc-kr 형태로 변경하여 사용. 안되면 utf-8로 변경 후 진행
    wr = csv.writer(f)
    wr.writerow([article_title, baseurl + link])
    f.close()        
    
print('종료')
#driver.close()

 

반응형

'개발관련 > Python' 카테고리의 다른 글

pynput로 단축키 만들기(with python )  (2) 2021.01.28
[개발환경]아나콘다 설치하기  (0) 2020.06.01