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')
#만약 없다면 다음 페이지로 넘어가기