본문 바로가기

Python

Python 네이버 밴드 - 크롤링

반응형

안녕하세요. 이번에는 python으로 네이버 밴드 게시글을 크롤링하는 소스코드를 소개해드립니다.

 

이번 프로젝트는 특정 환경까지 세팅후 데이터를 크롤링하도록 개발을 했습니다.

 

네이버 밴드 크롤링을 개발하면서 2가지를 고려했습니다.

1. 네이버 밴드는 로그인이 필요하다
  -> 크롬드라이버로 개발 시 네이버 로그인은 자동화 방지가 뜨더군요

 

2. 게시글이 길어지는경우 더보기 버튼을 통해서 전체 내용을 볼수 있기 때문에 더보기를 클릭한 후 처리되도록 개발했습니다.

 

3. CSV로 파일을 저장할 것이기 때문에 특수문자를 제거했습니다.

 

소스코드는 아래 GIT으로 관리했습니다.

https://github.com/kjky12/BandCrawling

 

GitHub - kjky12/BandCrawling

Contribute to kjky12/BandCrawling development by creating an account on GitHub.

github.com

 

라이브러리는 selenium을 통해 개발했습니다. 패키지가 없는경우 pip install selenium를 실행해 주세요. 

 

 

해당 프로그램의 시연 동영상은 아래와 같습니다.

https://kjk92.tistory.com/89

 

[Program]네이버 밴드 게시글 파싱 프로그램

안녕하세요. 이번에 개발 프로그램을 소개해 드립니다. 네이버 밴드의 게시글 정보를 가지고와서 csv로 저장하는 프로그램을 개발했습니다. 크롤링하는 데이터는 게시글, 일자로 한정되어있습

kjk92.tistory.com

 

 

전체 소스코드

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException

from os import rename, listdir

from datetime import datetime 
import time

import csv
import re


#chrome_driver = './chromedriver_103_0_5060.exe'
chrome_driver = 'D:/Project/GIT/BandCrawling/BandCrawling/chromedriver_103_0_5060.exe'
options = Options()
options.headless = False

driver = webdriver.Chrome(executable_path=chrome_driver, options=options)
driver.implicitly_wait(3)


driver.get("https://auth.band.us/login_page")

time.sleep(1)

#band_home = "https://band.us/band/"
#band_id = "48320017"  

driver.get("https://band.us/band/48320017")
time.sleep(1)
    
#CSV로 저장
f = open("write{0}.csv".format(datetime.now().strftime('%Y-%m-%d_%H%M%S')),'w', newline='')
wr = csv.writer(f)


while True : 
    try :
        #게시글 작성 시간 추출
        timetag = driver.find_element("xpath", '//*[@id="wrap"]/div[2]/div/div/section/div[2]/div/section/div/div[2]/div/div/a')
        timeT = timetag.text
        
        #일 제거
        idx = timeT.index("일")
        timeT = timeT[0:idx + 1]

        #공백 삭제 및 일자 규칙 변경
        timeT = timeT.replace(" ", "")
        timeT = timeT.replace("년", "-")
        timeT = timeT.replace("월", "-")
        timeT = timeT.replace("일", "")

        #게시글 영역 추출 후 텍스트뷰 정보 추출
        data = driver.find_element("xpath", '//*[@id="wrap"]/div[2]/div/div/section/div[2]/div/section/div/div[3]')
        textLine = data.find_elements(By.CLASS_NAME, "dPostTextView")
            
        # 텍스트 취합
        strData = ""
        for e in textLine :
            strData = strData + e.text + "\n"
            
        print(strData)

        #특수문자 제거
        strData = re.sub(r'[^ ㄱ-ㅣ가-힣A-Za-z]', '', strData)

        # csv 입력
        wr.writerow([timeT, strData])

        # 버튼을 찾아서 없으면 로직 종료(모든 밴드 데이터 수집 완료)
        NextBtn1 = driver.find_element("xpath", '//*[@id="wrap"]/div[2]/div/div/section/button[3]')
        if NextBtn1 : #다음버튼 클릭
            NextBtn1.click()    
        else :  #다음 버튼이 없는경우 반복문 종료
            break
            
        time.sleep(1)

    except Exception as e :
        print(e)
    
f.close()
반응형

'Python' 카테고리의 다른 글

[Python] 코사인 유사도(Cosine Similarity)  (0) 2022.07.20
Python 네이버 밴드 - 키워드 분석  (0) 2022.07.09
Python SYS 파라미터 및 변수  (0) 2022.06.09
PIP 관련 명령어 정리  (0) 2022.06.09
python pip mirror 서버 설정  (0) 2022.05.31