티스토리 뷰
2021.12.03 - [개발/파이썬(PYTHON)] - [PYTHON] 네이버 쇼핑 상품 목록 가져오기 (1/2)
목표 : 네이버쇼핑에서 내가 원하는 키워드에 대한 도출 결과 추출
- 항목 : 상품명, 링크, 가격, 등록일, 카테고리, 리뷰, 별점
1. 페이지 살펴보기 (개발자 도구)
2. Beautifulsoup 를 통한 상품 목록 추출
-> 실패 : 5개 상품까지만 가져옴.
3. Selenium, Beautifulsoup 조합을 통한 상품 목록 추출
-> 실패 : 40개 상품 가져오지만, 이미지 일부를 로딩하지 못함
4. Json 파일 요청을 통한 목록 추출
-> 성공 : 드디어 모든 상품 정보를 가져옴
4. Json 파일 요청을 통한 목록 추출
앞선 글에서 네이버 쇼핑에서 원하는 키워드에 대한 도출 결과를 추출하기 위해 Beautifulsoup + Selenium 을 조합하여 결과적으로는 문제를 해결할 수 있었지만, 속도와 코드의 측면에서 많은 복잡성 가지고 있었다.
또한 그 과정을 진행하다가 새롭게 Json 형태로 서버에서 상품정보를 일괄로 보내주는 부분을 찾게 되었고, 본 포스팅에서는 해당 정보를 통해서 네이버 쇼핑 상품 목록을 쉽게 가져오는 것을 포스팅 하고자 한다.
다시 처음으로 돌아가서 네이버쇼핑에서 동일 키워드 "엘사 12등"을 검색하면 아래와 같은 화면을 볼 수 있고, 이때 개발자 도구(F12) 를 통해 네트워크 정보를 확인할 수 있다.
https://search.shopping.naver.com/api/search/all?sort=rel&pagingIndex=2&pagingSize=40&viewType=list&productSet=total&deliveryFee=&deliveryTypeValue=&frm=NVSHATC&query=%EC%97%98%EC%82%AC12%EB%93%B1&origQuery=%EC%97%98%EC%82%AC12%EB%93%B1&iq=&eq=&xq=
Request URL 구성 정보 : api/search/all
- pagingIndex : 페이지 인덱스
- PageingSize : 페이지 내 노출 상품 목록 수
(현재 기준 22.01.23일 최대 80개까지 가능, 80보다 큰 수 적용 시 40으로 기본 세팅) - query : 검색어
Json 내 구성 정보 : ShoppingResult > products 상품 세부 정보 추출 가능
- Rank : 검색 시 노출 순위
- CategoryName : 카테고리 분류
- procuctName : 상품정보
- LowPrice : 최저가
- ImageUrl : 섬네일 이미지 경로
- mallProductUrl : 상품 정보 링크
- mallID : 등록자 구분정보
HTML 요청 시 Json 데이터를 처음 봤을 시점에 유독 response 의 리소스 크기가 컸던 점과 정보가 많아서 하나씩 눌러보다가 확인을 하게 되었다. 이미 알고 작성하는 포스팅이지만, 인지하기 전까지는 많은 이 역시도...많은 삽질이 있었다.
맨 처음 이 파일을 알게 되었을 때 그간의 노력이 삽질이였다고 생각되어졌지만, 그 역시 학습이 되었으니 긍정적으로 생각하기로 했다. 여튼 이 Json 파일은 생각보다 많은 정보를 제공하고 있었고, 추후에는 애초 친구가 요청했던 친구가 등록한 상품에 대해서만 "mallID"를 통해서 구분할 수 있는 의미있는 정보도 확인하였다.
위의 Flow 를 따라 구성한 코드는 간단하게 아래와 같이 구성하였다.
- 전체 검색 시 수량 확인 => 전체 페이지 확인 가능
- 검색어, 페이지 당 View 수 정의
- 상품등록자 mallid 정의 (MymallID)
- request 통해 Json 로드
- 상품별 정보 추출 (필요에 따라 내가 등록한 정보 선택적 확인)
for i in range (1, idx_max+1):
url = "https://search.shopping.naver.com/api/search/all?---"
r = requests.get(url)
json_str = json.loads(json.dumps(r.json()))
val1 = json_str['shoppingResult']["products"]
for idx, val in enumerate(val1):
mallid = val["mallId"]
if mallid == MymallID :
openDate = val["openDate"]
openData_new = openDate[:4]+"."+openDate[4:6]+"."+openDate[6:8]
mallProductUrl = val["mallProductUrl"]
imageUrl = val["imageUrl"]
productName = val["productName"]
lowPrice = val["lowPrice"]
rank = val["rank"]
reviewCountSum = val["reviewCountSum"]
Category = val["category2Name"],">",val["category3Name"],">",val["category4Name"])
본 포스팅까지 시간이 걸렸던 터라...처음 작성하려고 했을 때 느꼈던 부분들을 많이 놓치고 있는 것 같기도 하다.
혹시 따라서 해보시는 분이 계시다면 해보다가 잘 되지 않는 부분이 있으시면 언제든 댓글로 문의 주세요^^
다음 포스팅에 본 포스팅을 통해 확인한 정보를 가지고 스마트 스토어 상품 등록자 입장에서 관리할 수 있는 웹페이지를 구성해보려고 함.
Django 와 웹 프론트 개발 파트를 열심히 학습 중에 있음;;
'개발 > 파이썬(PYTHON)' 카테고리의 다른 글
Python을 활용한 나만의 똑똑한 비서 만들기 전자책 발행 (0) | 2022.12.04 |
---|---|
[PYTHON] 네이버 부동산 상가 매물 크롤링하기 (2) | 2022.03.02 |
[PYTHON] 네이버 쇼핑 상품 목록 가져오기 (1/2) (6) | 2021.12.03 |
Python 자료 구조 정리 (list, dictionary, tuple, set) (0) | 2021.10.29 |
[Python] matplotlib.pyplot 활용한 그래프 동적 업데이트 (2/2) (0) | 2021.01.04 |
- Total
- Today
- Yesterday
- PYTHON
- 경제적 자유
- 개발자도구
- 네이버쇼핑
- 경매
- tkinter
- eum.go.kr
- 상가
- 아파트
- json
- 크롤링
- 파이썬
- pandas
- 대항력있는 임차인
- DICTIONARY
- 부동산
- 평형정보
- pyplot
- cortarNo
- 매물
- 단지정보
- 네이버 부동산
- matplotlib
- 네이버 주식
- Export
- 네이버
- REST API
- 크몽
- Excel
- beautifulsoup
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |