작성
·
290
0
네이버 쇼핑 핫딜 데이터를 크롤링하는 과정에서
강의에서는 핫딜 버튼의 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()
- 실행결과