본문 바로가기
coding

daum cafe Web Scraping(제목, 글쓴이)

by 소담_아빠 2023. 1. 3.

2022.12.20. 다음 카페 웹 스크래핑

 

해야 하는 작업

엑셀 파일 생성하고 주소 입력, 아이디 입력, 패스워드 입력, 게시판 뒤 숫자 입력, 게시판 주소 입력

 

참고 자료

파이썬 코딩 무료 강의 (활용편3) - 웹 크롤링? 웹 스크래핑! 제가 가진 모든 비법을 알려드리겠습니다. [나도코딩]

[Selenium+bs4] 네이버 카페 검색창, iframe 크롤링 방법, 네이버 로그인 방법

 

[Selenium+bs4] 네이버 카페 검색창, iframe 크롤링 방법, 네이버 로그인 방법

이 글은 네이버 카페내의 결과에서 게시글 제목을 리스트로 출력하고, 게시글을 순서대로 클릭해서 들어갔다가 나가는 코드 설명입니다. # 1. iframe이란? 네이버 카페 내에서 카페내 검색 결과를

gorokke.tistory.com

# 다음 카페 제목 글쓴이 링크 가져오기 
from selenium import webdriver 
import time
from selenium.webdriver.common.by import By
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import openpyxl

# 엑셀 저장
# 미리 엑셀 파일 생성하고 주소 입력
fpath = (r'D:\coding\python\daumcafe1.xlsx')
wb = openpyxl.load_workbook(fpath)
ws = wb.active

# 셀레늄 크롬드라이버 연동
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
# 다음 로그인 싸이트 이동
driver.get("https://accounts.kakao.com/login/?continue=https%3A%2F%2Flogins.daum.net%2Faccounts%2Fksso.do%3Frescue%3Dtrue%26url%3Dhttps%253A%252F%252Fwww.daum.net")
# 아이디 패스워드 입력
driver.find_element(By.NAME,"loginKey").send_keys(" 아이디 입력   ")
driver.find_element(By.NAME,"password").send_keys(" 패스워드 입력   ")
driver.find_element(By.XPATH, r'//*[@id="mainContent"]/div/div/form/div[4]/button[1]').click()

time.sleep(1)
# 다음카페 이동

row = 2
# 게시판 맨 뒤 숫자 입력
for i in range(게시판 맨 뒤 숫자 예시: 1, 2000):
    #print("페이지 :", i)
# 게시판 주소 입력
    driver.get("게시판 주소 예시:https://cafe.daum.net/sedu22/IDO/{}".format(i))
    driver.implicitly_wait(3)
    # iframe으로 이동, 뷰트풀숩으로 타이틀, 이름 추출
    driver.switch_to.frame("down")
    soup = BeautifulSoup(driver.page_source, "lxml")
    title = soup.title.get_text()
    title1 = title[16:-10]
    print(title1)
    ws[f'C{row}'] = title1
    name = soup.find(attrs={"class":"link_item"})
    if name:
        name = name.get_text()
        print(name)
        ws[f'D{row}'] = name
    else:
        continue
    link = driver.current_url
    print(link)
    ws[f'B{row}'] = link
    row = row + 1

wb.save(fpath)


# 끄기
driver.close()