예제) G마켓 50위 까지의 "Best" 상품 데이터(순위, 상품명, 가격, 원산지) 수집
실습 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | from selenium import webdriver as wb from selenium.webdriver.common.keys import Keys import pandas as pd import time from bs4 import BeautifulSoup as bs url = 'http://corners.gmarket.co.kr/Bestsellers' driver = wb.Chrome(); driver.get(url); img_btn = driver.find_elements_by_css_selector('img.lazy') #데이터 프레임 작성용 리스트 #순위 | 상품명 | 가격 | 원산지 name = [] price = [] where = [] rank = [] #sleep(0.1)로 지연 발생, 웹 로딩 및 오류 방지용 for i in range(50) : #웹 로딩시 오류 방지를 위한 선택자 재 수집 img_btn = driver.find_elements_by_css_selector('img.lazy') img_btn[i].click() time.sleep(0.1) #파싱 soup = bs(driver.page_source,'lxml') rank.append(i+1)#순위 name.append(soup.select_one('#itemcase_basic > div > h1').text) #상품명 price.append(soup.select_one('#itemcase_basic > div > p > span > strong').text) #가격 #내부에 원산지 외의 텍스트가 있으므로 전처리요구됨 buf = soup.select_one('#container > div.item-topinfowrap > div.item-topinfo.item-topinfo--additional > div.box__item-detailinfo.box__item-detailinfo--additional > ul > li.list-item-origin.uxeslide_item > div > div').text where.append(buf.split('\n')[3]) driver.back() time.sleep(0.1) #데이터 프레임 작성 item_list = pd.DataFrame({'순위':rank,'제품':name,'가격':price,'원산지':where}) item_list.set_index('순위', inplace=True) display(item_list) | cs |
댓글
댓글 쓰기