2.25(화요일)~2.26(수요일)
오늘까지 이틀 간 https://github.com/SKNETWORKS-FAMILY-AICAMP/SKN011-1st-1Team
GitHub - SKNETWORKS-FAMILY-AICAMP/SKN011-1st-1Team
Contribute to SKNETWORKS-FAMILY-AICAMP/SKN011-1st-1Team development by creating an account on GitHub.
github.com
이러한 프로젝트를 진행했다. 이번 프로젝트에서는 데이터를 크롤링하는 역할을 맡아서 진행했다.
자세한 설명은 코드와 실행영상 아래에 정리를 하려고 한다.
작성한 코드(에러 발생)
# driver.back() 제외하기 전 + 예외처리 하기 전 원본 코드
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# korea_model_data = {
# "brand": ",",
# "model_name": ",",
# "news_title": ",",
# "news_link": ",",
# "category": ",",
# "model_price": ",",
# "car_img": ","
# }
korea_model_data=[]
# 1. chrome 실행
driver = webdriver.Chrome()
# 2. 특정 url 접근
driver.get('https://auto.danawa.com/')
time.sleep(1)
# 자동차백과 클릭
dict_btn = driver.find_element(By.XPATH,'//*[@id="gnbMenu"]/div/div/div[4]/a')
dict_btn.click()
korea_brand_elems = driver.find_elements(By.CSS_SELECTOR, ".domestic .branditem a")
for brand in korea_brand_elems:
brand_name = brand.find_element(By.CLASS_NAME, "name").text # 브랜드 이름 가져오기
brand_link = brand.get_attribute("href") # 브랜드 페이지 링크 저장
driver.get(brand_link) # 직접 브랜드 링크로 이동
models = driver.find_elements(By.CSS_SELECTOR, ".modelList li a")
for model in models:
model_data = {
"brand": ",",
"model_name": ",",
"news_title": ",",
"news_link": ",",
"category": ",",
"model_price": ",",
"car_img": ","
}
model_data["brand"] = brand_name # model_data[브랜드이름] 저장
model_name = model.find_element(By.CLASS_NAME, "name").text # 브랜드 이름 가져오기
model_data["model_name"] = model_name
model_link = model.get_attribute("href") # 모델 페이지 링크 저장
driver.get(model_link) # 직접 모델 링크로 이동
news = driver.find_element(By.CSS_SELECTOR, 'li[tab="news"] a.sendGAExcpt')
news_url = news.get_attribute("href")
driver.get(news_url)
news_area_elems = driver.find_elements(By.CSS_SELECTOR, ".newsTable")
for news_area_elem in news_area_elems:
a_tag = news_area_elem.find_element(By.CSS_SELECTOR, ".contents")
title = a_tag.find_element(By.CSS_SELECTOR, ".title")
href = driver.find_element(By.CSS_SELECTOR, "div.title a").get_attribute("href")
model_data["news_title"]=title.text
model_data["news_link"]=href
category = driver.find_element(By.CSS_SELECTOR, "button[work='segment']")
model_data["category"] = category.text
price = driver.find_element(By.CSS_SELECTOR, ".price .num")
model_data["model_price"] = price.text
image = driver.find_element(By.CSS_SELECTOR, ".photo img") # 이미지 요소 선택
model_data["car_img"] = image.get_attribute("src")
driver.back()
korea_model_data.append(model_data)
driver.back()
print(korea_model_data)
driver.back()
print(korea_model_data)
코드를 짜기 전에 가장 먼저 사이트에서 크롤링 해야할 정보들을 정리하고 나서 크롤링할 구역을 나눠서 따로 함수를 만들었다.
예를 들어서 이번 코드에서는 브랜드,모델명,뉴스제목,뉴스링크,차량의 카테고리(suv, 등등..),모델가격,차이미지 를 크롤링 해야했고, https://auto.danawa.com/auto/ 를 기준으로 크롤링할 구역이 국산,수입으로 나뉘기도 하고 데이터를 국산차와 수입차로 나누어 저장해두어야 이후에 streamlit에서 국산 차량, 외제 차량으로 페이지를 나누어 검색을 진행할 때 데이터를 사용하기 편할 것 같았기 때문에
우선 국산 차량 정보를 크롤링하는 코드를 작성하면서
" korea_brand_elems = driver.find_elements(By.CSS_SELECTOR, ".domestic .branditem a") " 이 부분에서
domestic 에 해당하는 부분을 import로 변경만 하면 외제 차량 정보를 크롤링할 수 있도록 고려하면서 코드를 작성했다.
문제1
하지만 영상 내용과 같이, '현대' 브랜드의 특정 모델까지만 크롤링을 진행하다가 중간에 에러가 발생하게 되었는데,
원인을 찾아보니 앞의 모델들은 news에 대한 정보가 존재했는데 특정 모델에는 news가 존재하지 않아서 에러가 발생했다. 이후에 예외처리를 하여 해결
문제2
그리고 driver.back()을 사용하면서 생기는 문제가 있었다.
'SK Networks AI > 일일 회고록' 카테고리의 다른 글
| [SK네트웍스 Family AI 캠프 11기] 일일 회고 - 16일차(25.02.28 금요일) (0) | 2025.02.28 |
|---|---|
| [SK네트웍스 Family AI 캠프 11기] 일일 회고 - 15일차(25.02.27 목요일) (1) | 2025.02.27 |
| [SK네트웍스 Family AI 캠프 11기] 일일 회고 - 13일차(25.02.25 화요일) (0) | 2025.02.25 |
| [SK네트웍스 Family AI 캠프 11기] 일일 회고 - 12일차(25.02.24 월요일) (2) | 2025.02.24 |
| [SK네트웍스 Family AI 캠프 11기] 일일 회고 - 11일차(25.02.21 금요일) (4) | 2025.02.21 |