Insight to Ptofitc [Python 실무] 경쟁사 가격 크롤링

[Python 실무] 경쟁사 가격 크롤링

2024. 5. 17. 02:531. Data Analyst/1-1. Python

728x90
반응형

 

온라인 오더 가격 기준으로 핵심 경쟁사 가격 데이터를 수집할 것이다.

현상황에서는 대부분의 경쟁사들이 동일한 구조를 갖고 있다. 

 


경쟁사 가격 조사 목적

  1. 경쟁사가격 변동 트래킹
  2. 자사 브랜드의 가격포지션 파악

(1차 코드)

: 한 브랜드의  [카테고리 - 아이템 - 가격 - 수집날짜] 데이터 수집하기

 

.

.

.

 

 

0. 필요한 라이브러리

#   현재 설치되어 있는 라이브러리 확인
# !pip list
 
#   라이브러리 설치
# !pip install pandas
# !pip install numpy
# !pip install matplotlib
# !pip install selenium
# !pip install beautifulsoup4
# !pip install tqdm

 

 

 

 

1. 필요한 라이브러리 import

import time
import pandas as pd
import urllib
import selenium


from bs4 import BeautifulSoup as bs
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC

from urllib.request import urlopen
from tqdm import tqdm
from datetime import date

 

 

Webdriver 불러오기. 

** webdriver.Chrome()으로만 했을 때 에러가 뜨면 아래와 같이 입력해준다. 

from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())

 

 

 

 

2. 사이트 불러오기

url = "URL 입력"


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

 

 

 

 

3. 카테고리명 + 카테고리 클래스명 수집

     : 카테고리 내의 아이템들을 가져올 때 각 카테고리를 클릭하기 위해. 즉, 카테고리 개수만큼 반복문을 돌리기 위해 수집

#카테고리 리스트화
category_group_list = []
category_name_list = []

categories = driver.find_elements(By.CLASS_NAME,'css-1l7wsu6')

for i in categories:
    category_name = i.text
    category_group = i
    
    category_name_list.append(category_name)
    category_group_list.append(category_group)
    

df_category = pd.DataFrame({'Category_name':category_name_list,
                           'Category_list':category_group_list})
df_category

 

 

 

 

4. 각 카테고리 내의 아이템명 + 가격 정보를 가져오기. (+수집 월도 추가하기)

     : 이것은 한 경쟁업체의 데이터만 가져온 것이고, 2차로는 여러 경쟁업체 데이터를 한 번에 수집할 수 있는 코드를 짤 계획이다.

category_list = []
name_list = []
price_list = []
date_list = []


for i in range(len(category_group_list)):
    cat_open = category_group_list[i].click()
    
    try:
        #한 섹션
        items = driver.find_elements(By.CLASS_NAME,'css-ao3ewa')

        for item in items:
            
            category = driver.find_element(By.CLASS_NAME,'css-jycgim').text
            name = item.find_element(By.CLASS_NAME,'css-vujpvo').text
            price = item.find_element(By.CLASS_NAME,'css-u3pmed').text
            date = date.today()


            category_list.append(category)    
            name_list.append(name)
            price_list.append(price)
            date_list.append(date.month)
            
    except:
        continue
        
        
        
df = pd.DataFrame({'Category': category_list,
                  'Item': name_list,
                  'Price': price_list,
                  'Date': date_list})
            
df    

df.to_csv('[Result]_Price_tracking.csv')

 

 

728x90
반응형