방명록
- [Python] selenium 다중 URL 크롤링 중 누락 문제2023년 12월 14일 10시 17분 02초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
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반응형'언어·프레임워크 > Python' 카테고리의 다른 글
[Python] py 파일을 exe 파일로 빌드, auto-py-to-exe가 답! (0) 2023.12.18 [Python] selenium webdriver의 AttributeError ㅠㅠ (0) 2023.06.12 [Python] pyqt5-tools 설치 에러 (0) 2022.09.30 [Python] JANDI 메시지 삭제 3번 클릭에서 1번 클릭 자동화 (0) 2022.01.11 [Python] dbm to xlsx 어플리케이션 만들기 (0) 2021.12.01 다음글이 없습니다.이전글이 없습니다.댓글