Insight to Ptofitc [Python 실무] 경쟁사 가격 크롤링 - 여러 업체/브랜드/회사 물품 가격 데이터 수집하기

[Python 실무] 경쟁사 가격 크롤링 - 여러 업체/브랜드/회사 물품 가격 데이터 수집하기

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

728x90
반응형

 

 

 

지난 글에 이어서 이번에는 복수 업체들의 데이터를 한 번에 크롤링 하는 방법을 다루겠다. 

 

 

# 각 브랜드와 URL 정의
brand_urls = {
    "경쟁사1": "url1",
    "경쟁사2": "url2",
    "경쟁사3": "url3",
    "경쟁사4": "url4",
    "경쟁사5": "url5",
    "경쟁사6": "url6"
}

# # 웹 드라이버 설정
# options = Options()
# options.headless = True  # 화면 출력 안 함 (백그라운드 실행)
# driver = webdriver.Chrome(options=options)

# 결과를 저장할 리스트 초기화
data = []

# 각 브랜드에 대해 반복
for brand, url in brand_urls.items():
    driver.get(url)
    time.sleep(5)
    
    
    
    # Category 수집 -----------------------------------------------------
    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})
    
    
    
    
    # Item Name + Price 수집 -----------------------------------------------------        
    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({'Brand name': [brand] * len(category_list),
                       'Category': category_list,
                       'Item': name_list,
                       'Price': price_list,
                       'Date': date_list})
    
    data.append(df)

# 모든 데이터프레임을 연결
final_df = pd.concat(data, ignore_index=True)

# 새로운 데이터 CSV 파일로 저장
final_df.to_csv(f'[Result]_Price_tracking_{date}.csv')


print("가격 데이터 수집이 완료되었습니다 : ", date)
# 웹 드라이버 종료
driver.quit()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형