Python

[Python] 네이버 카페 크롤링

일이 조금 있어서 네이버 카페의 크롤링 코드를 만들어야했다. 여러가지 글을 종합해서 처리할게 있었다. 가장 궁금했던건 어떻게 OTP인증이나 User-Agent가 브라우저가 아닌 요청이 Allow될지 였는데, 역시나 Selenium을 통해서 하면 User의 Action을 구사해서 할 수있었다.(Python 짱짱맨) 아래는 코드이다.

import time
from selenium import webdriver
import pandas as pd
from bs4 import BeautifulSoup as bs
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

if __name__ == "__main__" :

    ### 로그인 프로세스
    login_url='https://nid.naver.com/nidlogin.login'
    user_id="<USER  ID>"
    user_pw="<USER  PW>"

    browser=webdriver.Chrome(ChromeDriverManager().install())
    browser.get(login_url)
    browser.implicitly_wait(2)

    browser.execute_script("document.getElementsByName('id')[0].value=\'"+ user_id + "\'")
    browser.execute_script("document.getElementsByName('pw')[0].value=\'"+ user_pw + "\'")

    browser.find_element(by=By.XPATH,value='//*[@id="log.login"]').click()
    time.sleep(1)

    ### 크롤링 Target Url
    baseurl=''
    browser.get(baseurl)
    
    pageNum = 0

    while(True) :
        
        time.sleep(1)
        
        pageNum +=1 
        print(pageNum)

        browser.get(baseurl +'&search.page='+ str(pageNum))
        
        ### 카페 메인 게시클 화면이 iframe으로 구성되어있음. iframe id가 cafe_main
        browser.switch_to.frame('cafe_main')

        soup = bs(browser.page_source ,'html.parser')
        soup = soup.find_all(class_ = 'article-board m-tcol-c')[1]

        datas = soup.select("#main-area > div:nth-child(4) > table > tbody > tr")

        for data in datas:
            ### article 은 한줄입니다. 원하는 속성 get 후 처리
            article = data.find(class_= "article")
            
    print('Finish')