티스토리 뷰

반응형

2021.12.03 - [개발/파이썬(PYTHON)] - [PYTHON] 네이버 쇼핑 상품 목록 가져오기 (1/2)

목표 : 네이버쇼핑에서 내가 원하는 키워드에 대한 도출 결과 추출
   - 항목 : 상품명, 링크, 가격, 등록일, 카테고리, 리뷰, 별점

1. 페이지 살펴보기 (개발자 도구)
2. Beautifulsoup 를 통한 상품 목록 추출
  -> 실패 : 5개 상품까지만 가져옴.
3. Selenium, Beautifulsoup 조합을 통한 상품 목록 추출       
  -> 실패 : 40개 상품 가져오지만, 이미지 일부를 로딩하지 못함
4. Json 파일 요청을 통한 목록 추출
  -> 성공 : 드디어 모든 상품 정보를 가져옴

4. Json 파일 요청을 통한 목록 추출

 

앞선 글에서 네이버 쇼핑에서 원하는 키워드에 대한 도출 결과를 추출하기 위해 Beautifulsoup + Selenium 을 조합하여 결과적으로는 문제를 해결할 수 있었지만, 속도와 코드의 측면에서 많은 복잡성 가지고 있었다. 

 

또한 그 과정을 진행하다가 새롭게 Json 형태로 서버에서 상품정보를 일괄로 보내주는 부분을 찾게 되었고, 본 포스팅에서는 해당 정보를 통해서 네이버 쇼핑 상품 목록을 쉽게 가져오는 것을 포스팅 하고자 한다.

 

다시 처음으로 돌아가서 네이버쇼핑에서 동일 키워드 "엘사 12등"을 검색하면 아래와 같은 화면을 볼 수 있고, 이때 개발자 도구(F12) 를 통해 네트워크 정보를 확인할 수 있다.

네이버 쇼핑 : 엘사 12등 검색 결과
Network > Fetch/XHR : 브라우저와 서버가 HTTP 통신 할 때 request 전문 구성 확인

 

1페이지에서 최하단 페이지 링크에서 2page 선택 시 아래 2개 리소스 추가됨

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 : 등록자 구분정보

ShoppingResult > products

HTML 요청 시 Json 데이터를 처음 봤을 시점에 유독 response 의 리소스 크기가 컸던 점과 정보가 많아서 하나씩 눌러보다가 확인을 하게 되었다. 이미 알고 작성하는 포스팅이지만, 인지하기 전까지는 많은 이 역시도...많은 삽질이 있었다.

Products 내 중요 정보 모두 추출 가능

 

맨 처음 이 파일을 알게 되었을 때 그간의 노력이 삽질이였다고 생각되어졌지만, 그 역시 학습이 되었으니 긍정적으로 생각하기로 했다. 여튼 이 Json 파일은 생각보다 많은 정보를 제공하고 있었고, 추후에는 애초 친구가 요청했던 친구가 등록한 상품에 대해서만 "mallID"를 통해서 구분할 수 있는 의미있는 정보도 확인하였다. 

 

위의 Flow 를 따라 구성한 코드는 간단하게 아래와 같이 구성하였다.

 

  1. 전체 검색 시 수량 확인 => 전체 페이지 확인 가능
  2. 검색어, 페이지 당 View 수 정의
  3. 상품등록자 mallid 정의 (MymallID)
  4. request 통해 Json 로드
  5. 상품별 정보 추출 (필요에 따라 내가 등록한 정보 선택적 확인)
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 와 웹 프론트 개발 파트를 열심히 학습 중에 있음;;

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함