'Selenium'에 해당되는 글 2건

  1. ChatGPT로 네이버 최저가 검색 기능 개발하기 - 2편
  2. ChatGPT로 네이버 최저가 검색 기능 개발하기 - 1편

지난 편에서는, Colab 환경에서 네이버 최저가 검색 크롤링 기능을 구현하기 위해 ChatGPT에 일을 시켜보았습니다만, Selenium Library의 한계로 Colab에서는 더 이상 진행할 수가 없었습니다.

 

그래서 Local에서 다시 시도해보기로 합니다. MS Code와 Python 개발 환경을 설치했습니다.

제가 개발하던 시절과는 다르게 MS Code설치하면 그 안에서 Plugin 처럼 Python같은 것도 설치할 수 있네요. 참 좋은 세상입니다.

 

그럼 본격적으로 시작해봅니다.

코드는 지난 시간에 chatGPT가 다 만들어주었으니, 잠시 리뷰해보겠습니다.

 

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
import time

def get_lowest_price_product_url_selenium(product_name):
    # Selenium WebDriver 설정
    service = ChromeService(executable_path=ChromeDriverManager().install())
    options = webdriver.ChromeOptions()
    options.add_argument('headless')  # 창 없는 모드
    options.add_argument('disable-gpu')
    options.add_argument('lang=ko_KR')  # 한국어 설정
    browser = webdriver.Chrome(service=service, options=options)

    # 네이버 쇼핑으로 이동하여 제품 검색
    browser.get("https://search.shopping.naver.com/search/all?query=" + product_name)
    time.sleep(2)  # 페이지 로드 대기

    # 최저가 제품의 URL 추출
    browser.get(product_url)
    time.sleep(2)  # 페이지 로드 대기
    try:
        # 최저가 제품 링크 찾기 (네이버 쇼핑 페이지의 구조에 따라 수정이 필요할 수 있음)
        lowest_price_product = browser.find_element(By.CSS_SELECTOR, '.buyButton_btn_compare__4MFuE')
        product_url = lowest_price_product.get_attribute('href')
        print("최저가 제품 URL:", product_url)
    except Exception as e:
        print("데이터 추출 중 오류 발생:", e)

    # 브라우저 닫기
    browser.quit()

# 사용자로부터 제품 이름 입력받기
product_name = input("검색하고자 하는 제품 이름을 입력하세요: ")
get_lowest_price_product_url_selenium(product_name)

 

중간에 CSS_SELECTOR에 있는 buyButton~ 저 부분은 네이버 쇼핑 페이지에서 개발자 모드에 들어가서 내가 찾아 넣어야 하는데요, 실제 네이버쇼핑 페이지에는 없는 경우가 많았습니다. 네이버 페이지를 계속 보니, 쇼핑검색의 첫번째 페이지에는 최저가 표시가 없는 경우가 많고, 검색결과 중에 제품의 Catalog Page링크가 있는데, Catalog Page 내에 들어가야 최저가 표시가 있는 것을 발견했습니다.

 

그래서 고민을 하다가, 페이지 크롤링을 두번하는 것이 어떨까 아이디어를 내봤습니다.

"네이버 쇼핑 검색 1차 크롤링해서, Catalog Page 링크 확보한 후, Catalog Page를 다시 크롤링해서 최저가 링크 가져오기"로 바꿔보면 되지 않을까 싶었습니다. 주소만 다르지 크롤링 두번하는 되는 거라서, 적당히 Copy & Paste하면 될 것 같았습니다.

그래서 만든 코드는 아래와 같습니다.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
import time

def get_lowest_price_product_url_selenium(product_name):
    # Selenium WebDriver 설정
    service = ChromeService(executable_path=ChromeDriverManager().install())
    options = webdriver.ChromeOptions()
    options.add_argument('headless')  # 창 없는 모드
    options.add_argument('disable-gpu')
    options.add_argument('lang=ko_KR')  # 한국어 설정
    browser = webdriver.Chrome(service=service, options=options)

    # 네이버 쇼핑으로 이동하여 제품 검색
    browser.get("https://search.shopping.naver.com/search/all?query=" + product_name)
    time.sleep(2)  # 페이지 로드 대기

    # 최저가 제품의 Catalog URL 추출
    try:
        # 최저가 제품 링크 찾기 (네이버 쇼핑 페이지의 구조에 따라 수정이 필요할 수 있음)
        lowest_price_product = browser.find_element(By.CSS_SELECTOR, '.product_compare__Kfwlg')
        product_url = lowest_price_product.get_attribute('href')
        print("최저가 제품 Catalog URL:", product_url)
    except Exception as e:
        print("데이터 추출 중 오류 발생:", e)

    # 최저가 제품의 URL 추출
    browser.get(product_url)
    time.sleep(2)  # 페이지 로드 대기
    try:
        # 최저가 제품 링크 찾기 (네이버 쇼핑 페이지의 구조에 따라 수정이 필요할 수 있음)
        lowest_price_product = browser.find_element(By.CSS_SELECTOR, '.buyButton_btn_compare__4MFuE')
        product_url = lowest_price_product.get_attribute('href')
        print("최저가 제품 URL:", product_url)
    except Exception as e:
        print("데이터 추출 중 오류 발생:", e)

    # 브라우저 닫기
    browser.quit()

# 사용자로부터 제품 이름 입력받기
product_name = input("검색하고자 하는 제품 이름을 입력하세요: ")
get_lowest_price_product_url_selenium(product_name)

 

그리고 다음은 실행 결과입니다.

/usr/bin/python3 /Users/ACIDBURN/Documents/Coding/Naver_Lowest_Price_Selenium.py

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
MAC16:Coding ACIDBURN$ /usr/bin/python3 /Users/ACIDBURN/Documents/Coding/Naver_Lowest_Price_Selenium.py
/Users/ACIDBURN/Library/Python/3.9/lib/python/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
  warnings.warn(
검색하고자 하는 제품 이름을 입력하세요: 아이폰15프로 256GB 자급제
최저가 제품 Catalog URL: https://cr.shopping.naver.com/adcr.nhn?x=yefTI6VgqhQo7hbdQD298P%2F%2F%2Fw%3D%3Ds94zOEoJabaiLD7SZR0EsslXTrx5XKScUbyi6ESGid8SxgRr7I3pQK3IFghCXYbC6uXAo7C1Oc4tYgQHkFClKNSER9vd%2BL3gFRE8Xbm9xpt3WBY513xwFKnjS6%2BHy18WTrGd3CAlg8SpSdqTFw1ApvgTFZUrvRKnZcZpfV%2Fwu0W8eKc2vHmyDiFz6z7BhkveXpOr9sPYwajBkeE07IGGkJ8q8LIarFFrbJieiK6Rnd3yu2VcoSXmmBH79cr0bdTSl5X7PE%2BGeGF2XkoIgpEqmFGOvThZsNgVF7LHDTCmIXPdv39ptNf4N%2FwyXuMrYz2Ge%2F%2FBwD9xlUCuWLWemaWVTYdnqPuDC%2Fgl5yvm4sVtB7009rv0gL1YdSn5VFNKsVbay%2FOIq6qLqW%2BXB7aAhUB%2FZQCVdN3LpKf%2FbKuiZi7z1XJT6Vec1qLczsKbVg9HYclWrDRsedrZkNL785%2B5AV95meEqNGnYP2mQGFwl2o9AJeRM8JJ1iC5VoMUmeTETRygVRJoTEwFp83LCDTlYUT5z%2FawtK%2FlJjOKzlJV2IEBfprxFITMQJi5RFUiavbTCYnnFjT%2BbHlEfoJP37ZGqMrXynLc99iO6CN%2FbvLpNEgAE0YWjqJm6JUcf3WgSuHK7uJ85TQcNk8l6pSNQzL8Q3TUPgCJTL3ruaVJreZl%2BplMuLoOq2k%2BBBQEGhvEplrOhVpAiGcBbP2SwDVOcazNQfbdXHf%2B9za7bfeOAMRN%2BcT%2F9p%2BChB0CIl3BeKsFF2drF%2B%2BsFv&nvMid=42617437619&catId=50001519
최저가 제품 URL: https://cr.shopping.naver.com/adcr.nhn?x=USdtAXPJcw7NBhvDh6ME7v%2F%2F%2Fw%3D%3DsPhUEUnCivpSozxzJCtn4X1H84T0bcB2R0S2ckbEPXGsh4%2F%2BsIkGOcsjpRoly8iy91TiI7XbWKfbFTC8O67dtkVonis1xFR8Vg6%2FQP7779BxI8O3awYw2F01MqNqmOmepwSX9OxZvO0rPDBtkS5K%2FLdfeOpmloVehA3ESOPqbtTB1CySR%2FjCqjMmlbvlHjt5utPvOVpkiiuS2NnSY3AoTBh5EmXnF4H3IfqnZhoShupk4UGs2AiZAiqDwe3MPDaE5JHpqHvcixzgF8AalnMSphuNFzzz2Q6anY3mdM6aZSF4idQjoDjQPNjm3oGJC%2BAOD8ykgfjkpR8NbWz%2Fne%2Fn1nkWBpLgXa1AIhVzuIkQNMNhYiOG4HmV%2BsD5IDpS72X2odzp%2FdtCYNDHM0%2FAcXVrE1MHPv45Edr5fvvv%2FlTzZa4UFV%2FqDmWmSKLRyViJp%2FFfHX8dTXGd3GERhHB170jUZEJqsf9m110U9b5C3MhBzGHuEoNG0uj12g0%2F4PFHZzcOhcvyfFoOHjWOyAcz%2FmncFtrF%2Fz%2BUcpupZ5231Vhvtsieu98WLnorGiotJYxgKVbEBBw0aGTBpnSY3kiDYL8LRFc%2FnrvD952C9PD5gmE9QubaLT4rEGvUzEYbTV2vYncuzMqBtxWUHiamfb%2FB9pPrLv5UiMfx95GtdKVb69obEtf2dy8w24xJ26f9nYK9vPYixpQPQshAEO8fy1yLrqRcksjd3RIiU2Urj9GehuFhWIB1yDc13mDfw2R50LLGPPL44W8s3hXn%2FnqWSCUvPdPScCuZlJ5%2F9plHkOFOU0mKPzahWkbDrUFJ2hBG8QaB8WVzn&nvMid=43044708913&catId=50001519
MAC16:Coding ACIDBURN$

 

결과는 성공적입니다. 아이폰이 아니라, 갤럭시를 검색해도 잘 나옵니다.

물론 네이버 같은 대형페이지는 구조가 계속 바뀌고 저런 CSS Selector도 고정값이 아니기 때문에, 이후에는 동작하지 않을 수 있습니다만, 가장 확실한 방법은 정식으로 네이버 API를 쓰면 되는데요, 그건 나중에 시도해보려고 합니다.

 

작은 개인 과제이지만, 이 프로젝트를 시작한 동기는 "Python을 1도 모르는 저같은 사람도, ChatGPT를 이용해서 이런 것들을 개발할 수 있다는 점을 확인하는 것"이었고, 대단히 성공적이라는 생각이 듭니다.

 

앞으로 이렇게해서 ChatGPT를 활용한 시도를 계속해보려고 합니다.

 

이상으로 chatGPT를 이용하여 네이버 최저가 검색 기능 개발기를 마칩니다.

 

 



저는 코딩 손 놓은지 이제 15년이 넘은 직장인입니다. 현재는 개발과 무관한 일을 하고 있구요.

마음 한구석에 코딩에 대한 작은 소망들이 있기는 했습니다만, 다시 시작한다는게 쉽지 않기도 하고, 요즘 언어들을 새로 배운다는 것도 낯설기도 하고 그랬습니다.

그런데 ChatGPT의 시대가 왔네요. 그래서 개발을 한번 시도해보기로 했습니다.

 

주제 : ChatGPT로 웹크롤링을 통한 네이버 최저가 검색 기능 개발

목적 : 1) GPT를 이용한 개발에 익숙해지기 2) 노코딩 개발 툴에 익숙해지기

일단 PC에 개발환경 셋업하는 것도 귀찮으니까, Google Colab을 활용하기로 합니다.

 

ChatGPT와의 대화 전체를 남기려니, 글만 길어지는 것 같아서, 제 프롬프트만 Full로 남기고 ChatGPT의 답변이나 결과는 핵심만 정리해서 공유하려고 합니다.

 

당신
내가 원하는 제품이름을 입력받아서, 네이버쇼핑 웹페이지에서 그 제품을 검색하고 그 검색 결과 페이지에서 최저가 제품을 판매하는 사이트 URL을 리턴하는 파이썬 코드를 만들어줘.
이 코드는 colab에서 돌아가게 해줘

ChatGPT
네이버 쇼핑 검색 결과를 스크래핑하여 최저가 제품의 판매 사이트 URL을 리턴하는 파이썬 코드를 만드는 것을 도와드리겠습니다. 구현을 위해 Python에서 사용할 수 있는 requestsBeautifulSoup 라이브러리를 사용할 예정입니다. 이 코드는 Google Colab 환경에서 작동하도록 설정됩니다. requests를 사용해 네이버 쇼핑 검색 결과 페이지의 HTML을 가져오고, BeautifulSoup으로 파싱하여 최저가 제품 정보를 추출합니다.

 

# 필요한 라이브러리 설치
!pip install requests beautifulsoup4

import requests
from bs4 import BeautifulSoup

def get_lowest_price_product_url(product_name):
    # 네이버 쇼핑 URL 구성
    base_url = 'https://search.shopping.naver.com/search/all'
    query_params = '?query=' + requests.utils.quote(product_name)
    full_url = base_url + query_params
    
    # 네이버 쇼핑 페이지로 요청을 보내고 HTML을 가져옴
    response = requests.get(full_url)
    if response.status_code == 200:
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')
        
        # 최저가 제품의 정보를 추출 (구현 단계는 예시로, 실제 HTML 구조에 따라 달라질 수 있음)
        product_list = soup.select('.basicList_item__2XT81')
        if not product_list:
            return "제품을 찾을 수 없습니다."

        lowest_price = float('inf')
        lowest_price_url = ''

        for product in product_list:
            price = product.select_one('.price_num__2WUXn')
            if price:
                price = float(price.get_text().replace(',', '').replace('원', ''))
                if price < lowest_price:
                    lowest_price = price
                    link = product.select_one('.basicList_link__1MaTN')
                    if link and link.has_attr('href'):
                        lowest_price_url = link['href']

        return lowest_price_url
    else:
        return "네이버 쇼핑 검색에 실패했습니다."

# 사용 예시
product_name = "삼성 갤럭시 S21"  # 검색하고자 하는 제품 이름
lowest_price_product_url = get_lowest_price_product_url(product_name)
print(lowest_price_product_url)

 

product_name을 하드코딩하게 되어있네요. 

 

당신
product name은 나한테 입력받도록 해줘

 

# 필요한 라이브러리 설치
!pip install requests beautifulsoup4

import requests
from bs4 import BeautifulSoup

def get_lowest_price_product_url(product_name):
    # 네이버 쇼핑 URL 구성
    base_url = 'https://search.shopping.naver.com/search/all'
    query_params = '?query=' + requests.utils.quote(product_name)
    full_url = base_url + query_params
    
    # 네이버 쇼핑 페이지로 요청을 보내고 HTML을 가져옴
    response = requests.get(full_url)
    if response.status_code == 200:
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')
        
        # 최저가 제품의 정보를 추출 (구현 단계는 예시로, 실제 HTML 구조에 따라 달라질 수 있음)
        product_list = soup.select('.basicList_item__2XT81')
        if not product_list:
            return "제품을 찾을 수 없습니다."

        lowest_price = float('inf')
        lowest_price_url = ''

        for product in product_list:
            price = product.select_one('.price_num__2WUXn')
            if price:
                price = float(price.get_text().replace(',', '').replace('원', ''))
                if price < lowest_price:
                    lowest_price = price
                    link = product.select_one('.basicList_link__1MaTN')
                    if link and link.has_attr('href'):
                        lowest_price_url = link['href']

        return lowest_price_url
    else:
        return "네이버 쇼핑 검색에 실패했습니다."

# 사용자로부터 제품 이름 입력받기
product_name = input("검색하고자 하는 제품 이름을 입력하세요: ")

# 함수 호출 및 결과 출력
lowest_price_product_url = get_lowest_price_product_url(product_name)
print(lowest_price_product_url)

 

코드가 완성된 듯 보입니다. 이 코드를 Google Colab에 붙여 넣고, Run시킵니다.

근데 "네이버 쇼핑 검색에 실패했습니다." 에러가 리턴되네요?

 

당신
 
네이버 쇼핑 검색에 실패했습니다. 이런 에러가 나왔는데, 어떻게 고치면 될까?
header를 추가했는데도, 동일한 에러가 나와. 어떻게 고치면 될까?

ChatGPT
블라블라~~~
  1. 헤더 정보 변경: 사용자 에이전트(User-Agent)와 같은 헤더 정보를 더욱 다양하게 변경해보세요. 때로는 차단을 피하기 위해 브라우저에서의 정상적인 요청처럼 보이게 만드는 것이 필요합니다.
  2. 세션 사용: requests에서 Session 객체를 사용하여 상태(쿠키, 세션 정보 등)를 유지하면서 연속된 요청을 보낼 수 있습니다. 이는 서버에게 더 인간적인 사용 패턴처럼 보일 수 있습니다.
  3. API 사용 검토: 네이버 쇼핑과 같은 서비스는 공식 API를 제공할 수 있습니다. 공식 API를 사용하면 데이터 접근이 더 쉽고, 서비스 제공업체의 정책을 준수하는 방식으로 데이터를 가져올 수 있습니다.
  4. 웹 브라우저 자동화 도구 사용: selenium과 같은 웹 브라우저 자동화 도구를 사용하여 실제 브라우저 세션을 통해 페이지에 접근하고, 데이터를 추출할 수 있습니다. 이 방법은 대부분의 웹사이트에서 효과적이지만, 더 많은 리소스를 사용하고 속도가 느릴 수 있습니다.

    블라블라~~~

 

위에 ChatGPT가 제안하는 1, 2번을 시도했고 다 실패했습니다. 3번은 이 프로젝트의 목적에 맞지 않으므로 기각했고요, 4번은 무슨 말인지 잘 모르겠습니다. 왜 실패인지 나중에 알게되었지만, 이때까진 그냥 코드의 문제라고만 생각했었죠.

 

당신
header, session을 추가했는데도, 동일한 에러가 나는데 어떻게 고치면 될까?
 
 
ChatGPT
만약 requests와 BeautifulSoup을 사용하면서 헤더와 세션을 추가했음에도 불구하고 여전히 "네이버 쇼핑 검색에 실패했습니다."와 같은 오류가 발생한다면, 네이버 쇼핑 사이트의 방어 메커니즘이 강화되었거나, 스크래핑을 방지하기 위한 추가적인 조치가 적용되었을 가능성이 높습니다. 이 경우, 다음과 같은 몇 가지 대안적인 접근 방법을 고려해볼 수 있습니다.

1. 공식 API 사용

가장 권장되는 방법은 네이버 쇼핑이 제공하는 공식 API를 사용하는 것입니다. 공식 API를 사용하면, 웹 스크래핑을 통한 데이터 추출에서 발생할 수 있는 여러 문제를 피할 수 있으며, 네이버의 정책에도 부합합니다. 네이버 개발자 센터에서 API 사용 신청과 관련된 정보를 찾아볼 수 있습니다.

2. 웹 브라우저 자동화 도구 사용

selenium과 같은 웹 브라우저 자동화 도구를 사용하는 것입니다. selenium은 실제 웹 브라우저를 자동으로 조작하여 사이트에 접근하고, 사용자와 유사한 방식으로 웹 사이트를 탐색하므로, 많은 웹 사이트의 스크래핑 방지 메커니즘을 우회할 수 있습니다. 단, 이 방법은 성능이 느릴 수 있고, 추가적인 리소스가 필요합니다.

Selenium 예제 코드

아래 코드는 selenium을 사용하여 네이버 쇼핑에서 제품을 검색하고 최저가 제품의 URL을 가져오는 예제입니다. 이 코드를 실행하기 전에, selenium과 webdriver-manager를 설치하고, 적절한 웹드라이버(Chrome, Firefox 등)가 필요합니다.

 

!pip install selenium
!pip install webdriver-manager

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
import time

def get_lowest_price_product_url_selenium(product_name):
    # Selenium WebDriver 설정
    service = ChromeService(executable_path=ChromeDriverManager().install())
    options = webdriver.ChromeOptions()
    options.add_argument('headless')  # 창 없는 모드
    options.add_argument('disable-gpu')  
    options.add_argument('lang=ko_KR')  # 한국어 설정
    browser = webdriver.Chrome(service=service, options=options)
    
    # 네이버 쇼핑으로 이동하여 제품 검색
    browser.get("https://search.shopping.naver.com/search/all?query=" + product_name)
    time.sleep(2)  # 페이지 로드 대기
    
    # 최저가 제품의 URL 추출
    try:
        # 최저가 제품 링크 찾기 (네이버 쇼핑 페이지의 구조에 따라 수정이 필요할 수 있음)
        lowest_price_product = browser.find_element(By.CSS_SELECTOR, '.basicList_link__1MaTN')
        product_url = lowest_price_product.get_attribute('href')
        print("최저가 제품 URL:", product_url)
    except Exception as e:
        print("데이터 추출 중 오류 발생:", e)
    
    # 브라우저 닫기
    browser.quit()

# 사용 예시
product_name = "삼성 갤럭시 S21"  # 검색하고자 하는 제품 이름
get_lowest_price_product_url_selenium(product_name)

 

아 뭔가 라이브러리가 바뀌었습니다.  Request/BeautifulSoup 대신에, Selenium을 쓰라고 하네요.

Colab에 붙여넣고 Run해봅니다. 에러가 나네요.

 

당신
AttributeError: 'NoneType' object has no attribute 'split' 이런 에러가 나는데 어떻게 고치지?

ChatGPT
블라블라블라~~~~

당신
아니 그게 아닌 것 같아.

/usr/local/lib/python3.10/dist-packages/webdriver_manager/drivers/chrome.py in get_latest_release_version(self)
62 return determined_browser_version
63 # Remove the build version (the last segment) from determined_browser_version for version < 113
---> 64 determined_browser_version = ".".join(determined_browser_version.split(".")[:3])
65 latest_release_url = (
66 self._latest_release_url

AttributeError: 'NoneType' object has no attribute 'split'

이런 에러인데 다시 한번 봐줘

ChatGPT
블라블라블라~~~

1. webdriver_manager와 Chrome의 호환성 확인

webdriver_manager와 설치된 Chrome 브라우저 버전이 호환되는지 확인합니다. 때때로 webdriver_manager가 로컬 시스템에 설치된 Chrome의 버전을 정확히 식별하지 못할 수 있습니다. 이를 해결하기 위해 Chrome 브라우저를 최신 버전으로 업데이트하거나, webdriver_manager를 최신 버전으로 업데이트해 볼 수 있습니다.

2. Chrome 버전 수동 지정

ChromeDriverManager를 사용할 때, Chrome의 특정 버전에 대한 드라이버를 명시적으로 요청할 수 있습니다. 이 방법은 webdriver_manager가 자동으로 Chrome 버전을 결정하는 데 문제가 있을 때 유용할 수 있습니다.

3. 로컬 ChromeDriver 사용

webdriver_manager 대신 시스템에 직접 설치된 chromedriver를 사용하는 것도 한 가지 방법입니다. 이 경우, chromedriver의 경로를 직접 지정해야 합니다.

블라블라블라~~~

 

 

ChatGPT의 답변들을 보자니, 첨엔 잘 모르겠었는데 이제 조금 이해가 갑니다.

Selenium은 실제로 크롬웹브라우저를 구동시켜서 웹페이지를 로딩한 후에 크롤링을 하는 거였습니다. 그러니 Cloud에서 돌아가는 Google Colab으로는 정상동작을 할 수 없는 거네요.

 

개발하시는 분들에겐 상식일텐데, 저같은 일반인은 먼 길 돌아서 알아내게 되었습니다. ㅠ.ㅠ

그래서 Colab으로 웹크롤링해서 네이버 최저가를 가져오는 것은 실패입니다.

로컬에 환경 셋팅하고 다시 시도해보려고 합니다. 이 내용은 2편에서 이어집니다.