cs/크롤링

[크롤링] 목록 범위 설정하고 동적페이지에서 범위 찾기

신_이나 2023. 3. 27. 19:23

 

 

 

#----------------selenium 설정
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By #find_element 함수
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)
#페이지가 자동으로 꺼지지 않게 해줌
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
#크롬 버전을 자동으로 맞춰줌

#----------------bs4 설정
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
from urllib.request import urlopen
from bs4 import BeautifulSoup
from time import sleep

url = 'https://prstaff.sogang.ac.kr/prstaff/976.html'

driver.get(url)
sleep(2)
html = driver.page_source
bs = BeautifulSoup(html, 'html.parser')

#예시 목차 숫자
number_start = 7894 
number_end = 7919
n = 1

iframe = driver.find_element(By.XPATH, '//*[@id="iframe_main"]')
driver.switch_to.frame(iframe)

while(1) :
  str_xpath = driver.find_element(By.XPATH, '/html/body/div/div/div[2]/div/table/tbody/tr[2]/td[1]')
  str = str_xpath.text
  #print(str)
  
  str = int(str)
  if str <= number_end and str >= number_end - 25 :
    break

  else :
    driver.find_element(By.XPATH, '/html/body/div/div/div[4]/div/div/div/div/div[2]/a[%d]/span' %n).click()
    n = n+1
    html = driver.page_source
    bs = BeautifulSoup(html, 'html.parser')

오늘은 이 정도로만 구현하였다. 나머지는 이따 새벽이나 밤에 진행하도록 하겠다. 

 

 

while(1) :
  str_xpath = driver.find_element(By.XPATH, '/html/body/div/div/div[2]/div/table/tbody/tr[2]/td[1]')

  str = str_xpath.text
  #print(str)

#목차 페이지에서 가장 최근 올라온(가장 상단의) 게시물의 번호를 str 에 저장하였다.
  
  str = int(str) #이건 셀레네움을 사용하여 숫자로 데이터를 뽑아내는 방법을 몰라 강제로 string을 int로 바꿔주었다.
  if str <= number_end and str >= number_end - 25 :
    break

#만약 내가 찾고 싶은 숫자의 범위가 이 페이지 안에 있으면 break

#한 페이지 당 26개의 게시물이 있어 범위를 저렇게 잡아주었다.

  else :
    driver.find_element(By.XPATH, '/html/body/div/div/div[4]/div/div/div/div/div[2]/a[%d]/span' %n).click()
    n = n+1
    html = driver.page_source
    bs = BeautifulSoup(html, 'html.parser')

#만약 없다면 다음 페이지로 넘어가기