import pandas as pd
import requests
from bs4 import BeautifulSoup
G마켓 베스트 상품 데이터 수집
url = 'https://www.gmarket.co.kr/n/best'
response = requests.get(url)
response, response.text[:50]
(<Response [200]>,
'<!DOCTYPE html><html lang="ko" class="no-js"><head')
dom = BeautifulSoup(response.text, 'html.parser')
selector = '#gBestWrap > div.best-list > ul > li'
elements = dom.select(selector)
len(elements)
# 200
element = elements[0]
element
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만원 짜리 정도 됐습니다."
import os
path = 'imgs'
os.makedirs(path)
%ls imgs
link = df.loc[0, 'img']
link
# http://gdimg.gmarket.co.kr/3106295509/still/300?ver=20230905'
response = request.get(link)
response
# <Response [200]>
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 만원 정도의 일감을 받을 수 있게 되었습니다."
