[05] G-market

고근호·2023년 9월 5일
import pandas as pd
import requests
from bs4 import BeautifulSoup

G마켓 베스트 상품 데이터 수집

1. URL

url = 'https://www.gmarket.co.kr/n/best'

2. request > response : html

response = requests.get(url)
response, response.text[:50]
(<Response [200]>, 
'<!DOCTYPE html><html lang="ko" class="no-js"><head')

3. html > bs object

dom = BeautifulSoup(response.text, 'html.parser')

4. bs object > elements

selector = '#gBestWrap > div.best-list > ul > li'
elements = dom.select(selector)
len(elements)
# 200

5. elements > DataFrame

element = elements[0]
element

# 리스트 안에 딕셔너리(row), 딕셔너리 안에 리스트(column)

data = [{'id': 1, 'name': 'A'}, {'id': 2, 'name': 'B'}]
print(data)
pd.DataFrame(data)
print(df.to_dict('list'))
df
# [{'id': 1, 'name': 'A'}, {'id': 2, 'name': 'B'}]
#{'id': [1, 2], 'name': ['A', 'B']}
element
data = {
	'title': element.select_one('.itemname').text,
    'img': 'http:' + element.select_one('img').get('src'),	
    									# 이미지 태그 선택됨
    'sprice': element.select_one('.s-price').text,                 
}
data
items = []
for element in elements:
	items.append({
    'title': element.select_one('.itemname').text,
    'img': 'http:' + element.select_one('img').get('src'),	
    'sprice': element.select_one('.s-price').text, 
    })
len(items), items[:2]
df = pd.DataFrame(items)
df.tail(2)

-> "이제 크몽에서 20만원 짜리 정도 됐습니다."

6. 상품 이미지 데이터 수집

# 디렉토리 생성

import os
path = 'imgs'
os.makedirs(path)
%ls imgs

# img-url

link = df.loc[0, 'img']
link
# http://gdimg.gmarket.co.kr/3106295509/still/300?ver=20230905'

# request(img-url) > response : img

response = request.get(link)
response
# <Response [200]>

# img > save

with open(f'{path}/test.jpg', 'wb') as file:
	file.write(respones.content)
    
%ls imgs
from PIL import Image as pil
pil.open(f'{path/test.jpg'}
# img 나옵니다.
for idx, data in df[:5].iterrows():
	print(idx, data['img'])
    link = data['img']
    response = request.get(link)
    with open(f'{path}/{idx}.jpg', 'wb') as file:
    	file.write(response.content)

[결과]
0 http://gdimg.gmarket.co.kr/3106295509/still/300?ver=20230905'
1 http://gdimg.gmarket.co.kr/3106295509/still/300?ver=20230905'
2 http://gdimg.gmarket.co.kr/3106295509/still/300?ver=20230905'
3 http://gdimg.gmarket.co.kr/3106295509/still/300?ver=20230905'
4 http://gdimg.gmarket.co.kr/3106295509/still/300?ver=20230905'
form PIL import Image as pil
pil.open(f'{path}/3.jpg')

-> "이제 크몽에서 25~30 만원 정도의 일감을 받을 수 있게 되었습니다."


# 크롤링 정책

  • robots.txt : 크롤링 정책을 설명한 파일
  • 네이버증권 : 웹서비스에서 트래픽을 파악하여 API 활용
  • 네이버파파고 : 제공되는 API 활용
  • 크롤링으로 발생되는 문제 : 지적 재산권, 업무방해 손해배상

# 클라우드 서버 : 물리적서버를 논리적으로 나눠서 서비스 : boto3

# 개발자도구 : 크롬, IE, safari ... 사용가능 합니다.

# 동적, 정적 페이지 구분 : 데이터변화 : URL 변경(정적), URL 변경x(동적)

profile
rootgo 매일, 꾸준히 성장하는 사람🌱

0개의 댓글