728x90
반응형
무신사 반팔티 카테고리에서 무신사 추천순으로 나오는 해당 제품들의 정보를 긁어와 보자.
1. 브랜드명/상품명/가격을 가져와 보자.
2. 인덱스를 순위로 맞추고, 20위까지로 잘라보자.
1. 브랜드명/상품명/가격을 가져와 보자.
from bs4 import BeautifulSoup
from urllib.request import urlopen
#해당 url을 오픈합니다.
html=urlopen("https://search.musinsa.com/category/001001")
bsObject = BeautifulSoup(html, "html.parser")
print(bsObject)
#상품들의 정보가 담긴 li_box를 모두 가져옵니다.
item_list = bsObject.findAll('li',{'class':'li_box'})
print(item_list)
#
위의 코드로 해당 페이지의 html을 뜯어본후, 필요한 것들을 추려본다.
li라는 헤드의, class이름이 li_box인 것들을 모두 가져온다.
이때 findAll을 사용한다.
#빈리스트를 만들어 줍니다.
brand = []
name = []
price = []
number = []
number_box=0 #이걸로 순위를 카운트합니다.
for item in item_list:
#브랜드담기
brand_box = item.findAll('p',{'class':'item_title'})
if len(brand_box) == 1:
#brand = brand_box[0].get_text()
brand.append(brand_box[0].get_text())
elif len(brand_box) == 2 :
#brand = brand_box[1].get_text()
brand.append(brand_box[1].get_text())
#상품명담기
name_box = item.find('a', {'class':'img-block'}).get('title')
print(name_box)
name.append(name_box.strip())
#가격 담기
price_box = item.find('p',{'class':'price'}).get_text().split()
if len(price_box) ==1 :
price.append(price_box[0])
elif len(price_box) ==2 :
price.append(price_box[1])
#순위담기
number_box +=1
number.append(str(number_box))
#잘담겼는지 확인
print (brand)
print (name)
print (price)
유의할점은,
findAll과 find의 역할이 다르다는 점이다.
findAll로 태그를 불러오면, index추출이 안되는것 같다...
<결과>
2. 20위까지의 상품만을 노출해보자.
2-1. 데이터 프레임으로 본 결과물을 뽑아보자.
##데이터정제
import pandas as pd
data={'순위':number, '브랜드':brand, '상품명':name, '가격'+'('+'할인가'+')':price}
df=pd.DataFrame(data)
df
#index를 순위로 바꾸기.
df2 =df.set_index("순위")
df2
2-2. 20위 까지만 자르기
#20위까지만 자르기
df.loc[0:19]
##위에 만들어놓은 df2로 자르면 안될까?
df2.loc[1:20]
##그래서 이렇게 해주었다.
df3=df.loc[0:19]
df3=df3.set_index("순위")
df3
파일명 : musinsa_scrapping_3
참고한블로그
1. 데이터프레임 인덱스조작-데이터 사이언스 스쿨
2. 크롤링
https://koosco.tistory.com/41?category=837890
728x90
반응형
'활동 > 개인 프로젝트' 카테고리의 다른 글
[scrapping] 페이지를 긁어보자. (1) (0) | 2021.07.22 |
---|
댓글