Dandy Now!
  • [Python] selenium 다중 URL 크롤링 중 누락 문제
    2023년 12월 14일 10시 17분 02초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    1. selenium 다중 URL 크롤링 중 누락 문제

    어떤 사이트에 100개의 항목이 있는 10개의 페이지가 있다고 생각해 보자! 각 페이지는 URL이 다르지만 구조는 같다. 따라서 하나의 크롤링 코드로 10개에 대응이 가능하다. 이 얼마나 간단한 문제인가? 그냥 반복문을 돌리면 끝이다! 하지만 실제는 그렇게 간단하지 않았다. 첫 번째 시도한 페이지에서는 100개 항목을 잘 긁어 왔다. 하지만 그다음 페이지들은 줄줄이 19개를 넘지 못했다.

     

    2. 일부 누락 문제

    webdriver를 페이지마다 열고 닫고를 반복하는 방식을 시도한 결과 마지막 페이지를 제외하고는 100개의 항목을 모두 가져왔다. 마지막 페이지의 경우 79개만 긁어오고 있었다. 해당 페이지를 좀 더 살펴보니 렌더링 할 때 서버로부터 데이터를 19개씩 순차적으로 나누어 가져오고 있었다. 이는 무한 스크롤과 유사한 경험이었는데 PageDown 키를 30회 눌러서 페이지를 끝까지 내리는 코드를 추가했고 해당 문제를 해결할 수 있었다. 아래는 전체 코드이다.

    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service as ChromeService
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.common.by import By
    
    url_list = [
        'https://url_1',
        'https://url_2',
        'https://url_3',
        'https://url_4',
        'https://url_5',
        'https://url_6',
        'https://url_7',
        'https://url_8',
        'https://url_9',
        'https://url_10'
    ]
    
    href_list = []
    
    driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
    
    for URL in url_list:
        driver.get(url=URL)
        
        # 페이지 다운 키 누르기 추가
        for i in range(30):
            driver.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.PAGE_DOWN)
            time.sleep(0.1)
    
        a_tags = driver.find_elements(By.CSS_SELECTOR, 'a')
    
        result = [a_tag.get_attribute("href") for a_tag in a_tags]
    
        driver.quit()
    
        print(URL, len(result))
        href_list.extend(result)
    
    print('href_list : ', len(href_list))
    728x90
    반응형
    댓글