네이버 쇼핑 핫딜 크롤링 문제

미해결질문
ping9 프로필

네이버 쇼핑 핫딜 데이터를 크롤링하는 과정에서

강의에서는 핫딜 버튼의 ClassName이 '_productSet_hotdeal'로 되어있어

driver.find_element_by_class_name("_productSet_hotdeal").click() 코드를 사용하여 버튼을 클릭했지만,

현재는 네이버 쇼핑 소스가 변경되어 모든 버튼의 ClassName이 'subFilter_filter__3Y-uy'로 되어있어

driver.find_element_by_css_selector("#__next > div > div.container > div.style_inner__18zZX > div.style_content_wrap__1PzEo > div.style_content__2T20F > div.seller_filter_area > ul > li:nth-child(5) > button").click() 코드를 사용하여 버튼을 클릭하였습니다.

문제는, 버튼 클릭까지는 문제 없이 진행 되었지만

핫딜 페이지의 데이터를 출력하는 과정에서

핫딜 데이터를 출력하는 것이 아닌 기존의 데이터를 출력합니다.

어떻게 해결해야 될까요?

- app.py

from flask import Flask, render_template, request

app = Flask(__name__)

# crawling module import
import requests
from bs4 import BeautifulSoup

# excel module import
from openpyxl import Workbook

write_wb = Workbook()
write_ws = write_wb.active

# 셀리니움 사용 전 크롬 웹드라이버 설치
# Web automation module import
from selenium import webdriver

@app.route("/")
def hello_world():
    return render_template("index.html")

@app.route("/result", methods=["POST"])
def result():

    keyword = request.form['input1']
    page = request.form['input2']
    
    daum_list = []

    # crawling
    for i in range(1, int(page) + 1):
        req = requests.get("https://search.daum.net/search?nil_suggest=btn&w=news&DA=PGD&cluster=y&q=" + keyword + "&p=" + str(i))
        soup = BeautifulSoup(req.text, "html.parser")
        for i in soup.find_all("a", class_="f_link_b"):
            daum_list.append(i.text)
    
    # excel
    for i in range(1, len(daum_list) + 1):
        write_ws.cell(i, 1, daum_list[i-1])

    write_wb.save("static/result.xlsx")

    return render_template("result.html", daum_list = daum_list)

@app.route('/naver_shopping')
def naver_shopping():

    driver = webdriver.Chrome('./chromedriver.exe')

    driver.implicitly_wait(3)

    driver.get("https://search.shopping.naver.com/search/all?query=%EA%B3%B5%EA%B8%B0%EC%B2%AD%EC%A0%95%EA%B8%B0&frm=NVSHATC&prevQuery=%EA%B3%B5%EA%B8%B0%EC%B2%AD%EC%A0%95%EA%B8%B0")
    
    soup = BeautifulSoup(driver.page_source, "html.parser")

    for i in soup.select("#__next > div > div.container > div.style_inner__18zZX > div.style_content_wrap__1PzEo > div.style_content__2T20F > ul > div > div > li"):
        print(i.find("a", class_="basicList_link__1MaTN").text)

    print("---------------------------")

    driver.find_element_by_css_selector("#__next > div > div.container > div.style_inner__18zZX > div.style_content_wrap__1PzEo > div.style_content__2T20F > div.seller_filter_area > ul > li:nth-child(5) > button").click()
    soup = BeautifulSoup(driver.page_source, 'html.parser')

    for i in soup.select("#__next > div > div.container > div.style_inner__18zZX > div.style_content_wrap__1PzEo > div.style_content__2T20F > ul > div > div > li"):
        # 핫딜 페이지로 정상적으로 이동되어 있지만 기존의 페이지의 데이터를 출력함 
        print(i.find("a", class_="basicList_link__1MaTN").text)

    return render_template("shopping.html")

if __name__ == "__main__":
    app.run()

- 실행결과

개복치개발 프로필
개복치개발 2달 전

안녕하세요 ping9님

질문이 해결됨이라고 나오네요~

더 궁금하신 부분 있으시면 언제든지 문의 남겨주세요~

ping9 프로필
ping9 2달 전

잘못 등록된것같네요..

아직 미해결상태입니다~

개복치개발 프로필
개복치개발 2달 전

앗 얼핏 보기에는 잘 하신 것 같은데

마지막 강의인 "셀레니움 이미지 크롤링, 스크롤 다운" 까지 보시고, 스크롤 다운해도 잘 안되시면 질문 남겨주시면

제가 프로그램 다시 한번 돌려보겠습니다.

수강해주셔서 감사합니다~

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스