상품 비교를 위한 웹 스크롤링.

네이버 상품 비교를 하는데 있어서 좀 더 나에게 맞게 필터링을 하기 위해서 파이썬으로 상품 비교를 만드는 크롤링을 하기로 했다.

그러기 위해서 우선 공부한 부분이

정규식
import re

요청
from requests

뷰티불수프
from bs4 import BeautifulSoup

셀레니움
from selenium import webdriver
from selenium.webdriver.common.by import By

구글 드라이버
헤드레스

등등 너무 알아야 하는게 많았다.

어찌되었든 시작을 했으니까 끝을 내야지

그래도 현재 네이버 쪽에서 가격 비교를 하는거는 비슷하게 했는데 아직도 해야 하는게 많다.

import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup

import time
import csv

options = webdriver.ChromeOptions()
options.headless = True
options.add_argument("window-size=1920x1080")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36")
browser = webdriver.Chrome(options=options)


url = "https://search.shopping.naver.com/search/all?query=%ED%95%91%EA%B1%B0%EC%9A%94%EA%B1%B0%ED%8A%B8&bt=0&frm=NVSCPRO"

browser.get(url)

filename="가격비교.csv"
f = open(filename,"w",encoding="utf-8-sig", newline="")
writer = csv.writer(f)

extitle = "제목,가격,업체명,링크".split(",")
writer.writerow(extitle)


browser.execute_script("window.scrollTo(0,1080)")

interval = 2
prev_height = browser.execute_script("return document.body.scrollHeight")

# 반복 수행
while True:
        # 스크롤을 가장 아래로 내림.
        browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")

        # 페이지 로딩 대기
        time.sleep(interval)

        # 현재 문서 높이를 가져와서 저장.
        curr_height = browser.execute_script("return document.body.scrollHeight")

        if curr_height == prev_height:
            break

        prev_height = curr_height


soup = BeautifulSoup(browser.page_source,"lxml")
lists = soup.find_all("li", attrs={"class" : "basicList_item__2XT81"})

for list in lists :
    title = list.find("div",attrs={"class" : "basicList_title__3P9Q7"}).get_text()
    price = list.find("span",attrs={"class" : "price_num__2WUXn"}).get_text()
    store = list.find("a",attrs={"class" : "basicList_mall__sbVax"})

    if store :
        store = store.get_text()
    else :
        continue

    link = list.find("a", attrs={"class" : "basicList_link__1MaTN"})["href"]
    data = (title + "/t" + price + "/t" + store + "/t" + link).split("/t")
    writer.writerow(data)
    print(title)
    # print(title,",",price,",",store,",",link)



time.sleep(50)




코드를 입력하세요

좋은 웹페이지 즐겨찾기