인프런 커뮤니티 질문&답변

KimJuYoung님의 프로필 이미지
KimJuYoung

작성한 질문수

[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

안녕하세요 선생님 여기에 이런 질문을 해도될지 모르겠지만 부탁드립니다ㅠㅠ

작성

·

308

0

셀레니움 크롬 드라이버를 배우고 웹하드 크롤링을 하려고 하는데 예기치 못한 상황이 생겼습니다...

 

https://smartfile.co.kr/

 

스마트파일이라는 사이트를 크롤링하려고 하는데 일단 크롬드라이버로 사이트에 접속을하고

원하는 카테고리의 정보를 (페이지 번호, 개수 등등)을 넣어서 beautiful soup로 받아오려고 했지만 특정 카테고리에 가서 url을 그대로 복사하고 브라우저에서 복사한 url을 그대로 입력후 접속을 하니까 smart file이라는 글자만 나오고 자료가 나오지 않는 상황이 생깁니다..

그래서 뭔가 막아놨구나 생각해서 chrome driver로 카테고리를 클릭해서 들어가려고 코드를 짰는데 카테고리를 클릭하니까 구글로 이동이됩니다.

 

뭔가 되게 많이 막아놓은것같은데 자바스크립트 명령어로 클릭을 해봐도 동일한 결과가 나옵니다

 

어떻게 하면 좋을까요 부탁드립니다...

 

 

이것은 driver를 생성하는 모듈입니다

"""
크롬 드라이버 생성 및 설정 모듈
"""

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

# 크롬 드라이버 자동 업데이트
from webdriver_manager.chrome import ChromeDriverManager


def create_driver():
    # 크롬 브라우저 꺼짐 방지
    chrome_options = Options()
    chrome_options.add_experimental_option('detach', True)

    # 불필요한 에러 메시지 없애기
    chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])

    # 크롬 드라이버 최신 버전 설치
    service = Service(executable_path=ChromeDriverManager().install())

    # 드라이버 객체 생성
    driver = webdriver.Chrome(service=service, options=chrome_options)
    driver.service = service
    driver.implicitly_wait(10)
    driver.maximize_window()

    return driver

 

이것은 크롬드라이버를 생성해서 크롤링을하려고 크롬드라이버로 접속해서 해당 url에 접속하는 모듈입니다

import time

from selenium import webdriver
from selenium.webdriver.common.by import By


def execute_crawling(driver: webdriver.Chrome, url: str):
    for i in range(2):

        driver.get(url)
        time.sleep(2)

        if i == 0:
            menu_book = driver.find_element(By.CSS_SELECTOR, '#wrap > div.wrap-nav-wrap > div > ul.depth1 > li.menutop_DOC.m9')

            driver.execute_script("arguments[0].click();", menu_book)

            time.sleep(1)


 

 

 

 

 

답변 1

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

동적으로 데이터를 가져오는 페이지 입니다.

 

셀레니움 말고 requests post 요청을 이용해서

크롤링해보세요

 

아래 통신에서 원하는 데이터를 가져올 수 있습니다.

image

KimJuYoung님의 프로필 이미지
KimJuYoung

작성한 질문수

질문하기