-
다음 카페 크롤링(2023년 업데이트)Python/파이썬 웹 크롤러 2023. 11. 19. 15:58반응형
* 지나친 크롤링은 서버에 무리를 줄 수 있으며, 계정 정지 처분을 받을 수 있습니다.
달라진 부분
1. 다음 카페의 로그인 방식
2. 셀레니움의 버전업
3. 웹 드라이버 자동 설치설치
pip install selenium pip install webdriver-manager
코드
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By # 크롬 드라이버 자동 설치 from webdriver_manager.chrome import ChromeDriverManager # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option('detach', True) # 크롬 드라이버 자동 설치 service = Service(executable_path=ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=chrome_options) driver.implicitly_wait(5) # driver.maximize_window() # https://cafe.daum.net/SoulDresser/FLTB/792429 CAFE = 'SoulDresser' # 카페 주소 BOARD = 'FLTB' # 게시판 주소 PAGE_NUM = 2 # 크롤링할 페이지 수 # 접속 driver.get(f'https://m.cafe.daum.net/{CAFE}') # 카카오 로그인 선택 login = driver.find_element( By.CSS_SELECTOR, '#mArticle > div > div > div > div.login_account > a') login.click() driver.implicitly_wait(5) # 아이디 입력 kakao_id = input('카카오 아이디를 입력하세요 : ') id_ = driver.find_element(By.CSS_SELECTOR, '#loginId--1') id_.click() id_.send_keys(kakao_id) # 패스워드 입력 kakao_pw = input('카카오 비밀번호를 입력하세요 : ') pw = driver.find_element(By.CSS_SELECTOR, '#password--2') pw.click() pw.send_keys(kakao_pw) # 로그인 버튼 login = driver.find_element( By.CSS_SELECTOR, '#mainContent > div > div > form > div.confirm_btn > button.btn_g.highlight.submit') login.click() # 2단계 인증 대기 input('2단계 인증을 확인하셨습니까?') driver.get(f'https://m.cafe.daum.net/{CAFE}/{BOARD}') for i in range(1, PAGE_NUM + 1): driver.implicitly_wait(10) items = driver.find_element(By.ID, 'slideArticleList').find_elements(By.TAG_NAME, 'li') for item in items: article = [ item.find_element(By.TAG_NAME, 'a').get_attribute("href").split('/')[-1], item.find_element(By.CLASS_NAME, 'txt_detail').text, item.find_element(By.CLASS_NAME, 'username').text, item.find_element(By.CLASS_NAME, 'created_at').text, item.find_element(By.CLASS_NAME, 'view_count').text, ] print(article) next_page_num = i % 5 + 1 if next_page_num != 1: next_page = driver.find_element( By.CSS_SELECTOR, f'#pagingNav > span:nth-child({next_page_num + 1})') else: next_page = driver.find_element( By.CSS_SELECTOR, '#mArticle > div.paging_board > a.btn_page.btn_next') next_page.click()
데이터를 프린트 대신 원하는 형식으로 저장하면 됩니다.
반응형