G마켓 베스트 상품 이미지 수집

P4·2023년 5월 25일
0
post-thumbnail

라이브러리 임포트

import pandas as pd
import requests
from bs4 import BeautifulSoup

1. URL 찾기

url = "http://corners.gmarket.co.kr/Bestsellers"

2. request > response : str(html)

response = requests.get(url)
print(response)

3. bs > DataFrame

dom = BeautifulSoup(response.text, "html.parser") # html 파싱

# select items
elements = dom.select("#gBestWrap > div > div:nth-child(5) > div > ul > li")
print(len(elements), "\n") # 태그와 클래스로 아이템 찾기

element = elements[0] # 첫번째만 확인

# select item data
data = {
    "title": element.select_one(".itemname").text,
    "link": element.select_one(".itemname").get("href"),
    "img": element.select_one("img").get("data-original"),
    "o_price": element.select_one(".o-price").text,
    "s_price": element.select_one(".s-price").text.strip().split("\n")[0],
}
print(data, "\n")

# make DataFrame
datas = []
for element in elements:
    datas.append({
        "title": element.select_one(".itemname").text,
        "link": element.select_one(".itemname").get("href"),
        "img": "http:" + element.select_one("img.lazy").get("data-original"),
        "o_price": element.select_one(".o-price").text,
        "s_price": element.select_one(".s-price").text.strip().split("\n")[0],
    })
df = pd.DataFrame(datas)
display(df.head())

4_1. download image

# make directory
import os

if not os.path.exists("datas"):           
    os.makedirs("datas")
%ls
img_link = df.loc[0, "img"]
print(img_link)
  • 폴더가 생성됐는지 확인한다.

4_2. download image

response = requests.get(img_link)
print(response)
  • 이미지 파일 열기

  • test.png는 코드 확인용으로 넣어둔 이미지 파일이다. G마켓 이미지는 경로를 직접 보고 입력하거나 glob을 사용하면 된다.

# import glob from glob
# path = glob("datas/*.png")
# for i in path:
#	with open(i, "wb") as file:
#		file.write(response.content)

with open("datas/test.png", "wb") as file:
    file.write(response.content)
  • datas 폴더내의 파일들 확인
%ls datas
  • 이미지 파일 보기
from PIL import Image as pil

pil.open("datas/test.png")
  • 5개의 아이템 이미지 다운로드
# 5개의 아이템 이미지 다운로드
for idx, data in df[:5].iterrows():
    filename = "0" * (3 - len(str(idx))) + str(idx)
    print(idx, end=" ")
    response = requests.get(data.img)
    with open(f"datas/{filename}.png", "wb") as file:
        file.write(response.content)
  • 다운로드 됐는지 확인
%ls datas
pil.open("datas/002.png")
profile
지식을 담습니다.

0개의 댓글