파이썬/웹 크롤링

[웹 크롤링] Gmarket 100 가져오기로 창없는 크롤링하기

취준생코린이 2021. 6. 7. 11:03
728x90

먼저 Gmarket에서 인기순위 1위인 상품의 상품명, 가격, 카테고리 정보를 가져와 보자.

from selenium import webdriver as wb
import pandas as pd
import time

driver = wb.Chrome()
url = "http://corners.gmarket.co.kr/Bestsellers"
driver.get(url)

# 단수, 복수 잘보자!
# elements 복수는 list로 가져와짐
# no1인 상품 클릭!
div = driver.find_element_by_css_selector("p#no1 + div")
div.click()
itemTitle = driver.find_element_by_css_selector("h1.itemtit")
itemPrice = driver.find_element_by_css_selector("strong.price_real")
itemCategory = driver.find_element_by_css_selector("div.location-navi > ul > li:last-child > a")
print(f"상품명 : {itemTitle.text}, \n가격: {itemPrice.text}, \n카테고리: {itemCategory.text}")

 

뒤로가기

# 뒤로가기
driver.back()

 

1위인 상품의 정보를 가져와봤으니 이런식으로 반목문을 이용하여 100위까지의 정보를 가져와보자. 

자료가 많아서 일단 1~4까지만 반복하였다.

100개 전부 가져오려면 반복문을 1, 101로 고치면 된다.

from selenium import webdriver as wb
import pandas as pd
import time

driver = wb.Chrome()
url = "http://corners.gmarket.co.kr/Bestsellers"
driver.get(url)
time.sleep(1)

titleList = []
priceList = []
cateList = []

for i in range(1,4):
    div = driver.find_element_by_css_selector("p#no" +str(i)+"+div")
    div.click()
    time.sleep(1)
    itemTitle = driver.find_element_by_css_selector("h1.itemtit").text
    itemPrice = driver.find_element_by_css_selector("strong.price_real").text
    itemCategory = driver.find_element_by_css_selector("div.location-navi > ul > li:last-child > a").text
    
    titleList.append(itemTitle)
    priceList.append(itemPrice)
    cateList.append(itemCategory)
    time.sleep(1)
    driver.back()
    time.sleep(1)

dic = {"상품명" : titleList, "가격": priceList , "카테고리" : cateList}
pd.DataFrame(dic)

 

창없는 크롬으로 크롤링 headless 사용

from selenium import webdriver as wb
import pandas as pd
import time

options = wb.ChromeOptions()
# headless는 브라우저 창을 실제로 운영체제의 ‘창’으로 띄우지 않고 
# 대신 화면을 그려주는 작업(렌더링)을 가상으로 진행해주는 방법으로 
# 실제 브라우저와 동일하게 동작하지만 창은 뜨지 않는 방식으로 동작할 수 있다.
options.add_argument('headless')
# 크롬 창의 크기 옵션
options.add_argument('window-size=1920x1080')
# gpu(그래픽카드 가속)를 사용하지 않는 옵션
options.add_argument("disable-gpu")
# 혹은 options.add_argument("--disable-gpu")
# 만약 위 코드를 실행했을때 GPU에러~가 난다면 
# --disable-gpu로 앞에 dash(-)를 두개 더 붙여봐라. 
# 이 버그는 크롬 자체에 있는 문제점이다.

#  chrome_options는 Chrome을 이용할때만 사용하는 인자이다.
# 이 인자값을 통해 headless등의 추가적인 인자를 넘겨준다.
driver = wb.Chrome("C:/Users/SM2119/크롤링/chromedriver.exe", chrome_options=options)
driver.get("http://corners.gmarket.co.kr/Bestsellers")
time.sleep(1)
title_list = []
price_list = []
cate_list = []
for i in range(1,10) :
    div = driver.find_element_by_css_selector("p#no"+str(i)+ "+div")
    div.click()
    time.sleep(1)
    title = driver.find_element_by_css_selector("h1.itemtit").text
    price = driver.find_element_by_css_selector("strong.price_real").text
    cate = driver.find_element_by_css_selector("div.location-navi > ul > li:last-child > a").text     
    title_list.append(title)
    price_list.append(price)
    cate_list.append(cate)   
    time.sleep(1)
    driver.back()
    time.sleep(1)
    
dic = {"상품명" : title_list, "가격": price_list, "카테고리" : cate_list}
pd.DataFrame(dic)

driver.quit()
pd.DataFrame(dic)

728x90