반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- html cell
- Django 특정 값 가져오기
- html cell size
- Django
- Dependency Injection
- table tag
- Spring
- Django column 값 가져오기
- html
- table cell size
- Dependency
- DI
Archives
- Today
- Total
emluy 개발 일기
python - Crawling 의류 데이터 크롤링 본문
SMALL
0. 파이썬 설치 & 주피터 노트북 설치(cmd)
- 파이썬 설치
- 파이썬 환경 변수 설정
- 주피터 노트북 설치
[Crawling] 전국 스타벅스 매장 정보 .. : 네이버블로그 (naver.com)[Crawling] 전국 스타벅스 매장 정보 .. : 네이버블로그 (naver.com)
1. 자동 클릭(selenium) & selector로 element 가져오기 (Beautifulsoup)
2. xpath 문법
https://wkdtjsgur100.github.io/selenium-xpath/
3. 이미지 크롤링
https://youngq.tistory.com/7?category=764296
4. 그외
https://wayhome25.github.io/python/2017/04/25/cs-27-crawling/
# 크롤링 모듈 임포트
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import time
import csv
import urllib.request
import openpyxl
wb = openpyxl.Workbook()
# 한섬 홈페이지 접속
browser = webdriver.Chrome('chromedriver.exe')
url = 'http://www.thehandsome.com/ko/c/ou_we014/ou#1_0_0_0_0_641_0_0_0'
browser.get(url)
count=1
brand=[]
productname=[]
price=[]
productid=[]
longdetail=[]
shortdetail=[]
productcolor=[]
productsize=[]
productimage=[]
productlist=wb.active
columns = ['id','brand','sex','maincategoryId','subcategoryId','title','price','longdetail','shortdetail','color','size','imagePath']
productlist.append(columns)
//2페이지까지만
for k in range(2):
print('page')
print(k+1)
time.sleep(4)
//페이지 클릭
locates=f'//*[@id="bodyWrap"]/div[2]/div[2]/span/a[{k+1}]'
page = browser.find_element_by_xpath(locates)
page.send_keys('\n')
url = browser.current_url
item_xpath = []
//페이지마다 12개의 상품 클릭
for i in range(12):
locates=f'//*[@id="listBody"]/li[{i+1}]/div'
item_xpath.append(locates)
for xpath in item_xpath:
time.sleep(6)
browser.find_element_by_xpath(xpath).click()
time.sleep(3)
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
//상품 상세 정보 크롤링
locates='//*[@id="contentDiv"]/div[1]/div[1]/h4/div/a[1]'
brand=browser.find_element_by_xpath(locates).text
locates='//*[@id="contentDiv"]/div[1]/div[1]/h4/span'
productname=browser.find_element_by_xpath(locates).text
locates='//*[@id="contentDiv"]/div[1]/div[1]/p[1]/span[1]'
price=browser.find_element_by_xpath(locates).text
price=price[1:]
locates='//*[@id="contentDiv"]/div[1]/div[1]/div[2]/strong/span'
productid=browser.find_element_by_xpath(locates).text
locates='//*[@id="contentDiv"]/div[1]/div[1]/div[2]/div/p'
longdetail=browser.find_element_by_xpath(locates).text
locates='//*[@id="contentDiv"]/div[1]/div[1]/div[2]/li'
shortdetail=browser.find_element_by_xpath(locates).text
locates='#contentDiv > div.info > div:nth-child(5) > ul > li:nth-child(1) > div > ul > li'
colors=soup.select(locates)
//색상 여러개인 경우 색상마다 색상코드와 이미지저장
j=1;
for color in colors:
style = color.select('a')[0]['style']
stylesplit = style.split()
for word in stylesplit:
if 'background' in word:
productcolor = word[12:18]
print(productcolor)
locates=f'//*[@id="contentDiv"]/div[1]/div[4]/ul/li[1]/div/ul/li[{j}]/a'
colorimage=browser.find_element_by_xpath(locates)
colorimage.send_keys('\n')
time.sleep(1)
locates='//*[@id="imageDiv"]/ul/li[1]/img'
productimage=browser.find_element_by_xpath(locates)
productimage=productimage.get_attribute('src')
urllib.request.urlretrieve(productimage,'../img/woman/top/neat/'+str(count)+'.jpg')
//size여러개인 경우 사이즈마다 데이터 저장
locates = '#contentDiv > div.info > div:nth-child(5) > ul > li:nth-child(2) > span.txt > ul > li'
sizes=soup.select(locates)
for size in sizes:
s = size.select('a')[0].text
s = s.split()
productsize = s[0]
print(productsize)
productlist.append([productid,brand,'w','2','10',productname,price,longdetail,shortdetail,productcolor,productsize,count])
j=j+1
count=count+1;
time.sleep(2)
browser.get(url)
time.sleep(5)
locates=f'//*[@id="bodyWrap"]/div[2]/div[2]/span/a[{k+1}]'
page = browser.find_element_by_xpath(locates)
page.send_keys('\n')
//엑셀 저장
wb.save('../product/woman/top/neat/woman_top_neat.xlsx')
반응형
'웹 개발 > project' 카테고리의 다른 글
Trip surfer - #1 Geodjango, PostGIS, googlemap 중 Trip surfer 구현 시 필요한 것 고르기 (0) | 2020.10.30 |
---|---|
Trip surfer - # 0 Docker Django PostgreSQL (0) | 2020.10.13 |
특허관점기업분석 - ajax로클릭 시 새로고침 안하고 DB에서 값 가져온 후 띄워주기 (0) | 2020.06.18 |
Comments