일이 조금 있어서 네이버 카페의 크롤링 코드를 만들어야했다. 여러가지 글을 종합해서 처리할게 있었다. 가장 궁금했던건 어떻게 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')