본문 바로가기

쇼핑몰키우기

[위탁판매] Python 활용 쇼핑몰 자동화로 돈 벌기 - 2편

 

 

 

[위탁판매] Python 활용 쇼핑몰 자동화로 돈 벌기 - 1편

나는 위탁판매 쇼핑몰을 약 5년 전에 시작했다. 블로그에 무슨 글을 쓰면 좋을까 하다가 새로운 쇼핑몰을 만들고, 그걸 키워가는 과정을 기록하면 좋겠다 싶었다. 지금부터 파이썬을 이용해서

myworld1004.tistory.com

 

 

지난 1편에서는 쇼핑몰 개설까지 했었다.

 

 

 

 

 

이번엔 도매처를 찾아보고 상품등록에 필요한 정보를 크롤링해 보자.

 

 

 

 

 

 

 

 

 

구글검색

 

 

 

구글에 위탁판매 도매사이트를 검색하면 굉장히 많은 사이트들이 나오게 된다.

검색결과에서 우린 조금 신중하게 도매사이트를 선택해야 한다.

 

 

 

우린 배송을 직접 하지 않기에, 배송과정이 빠르고 정확한지 상품정보들은 어떻게 제공되는지 등

확인해야 할게 많다.

 

 

 

 

일단은 플랫폼은 조금 피하고 싶다.

 

전문성을 가지고 입점하는 도매처들도 있지만, 우리와 같은 방식을 플랫폼에 그대로 적용하는 업체들도 있다.

위탁판매를 소매업자에게 하는 구조이다.

 

피해야 하는 이유는 중간과정이 많아 가격이 비싸다. 그럼...? 싸게 팔고 많이 남기기가 어렵다.

추가로 상품이미지등 원본파일을 제공하지 않았는 데 사용했다고 법적인 책임을 물 수도 있다.

 

 

 

 

 

 

플랫폼제품

 

 

 

특정 플랫폼 사이트에서 위와 같은 귀여운 제품을 찾았다.

 

도매가 11,600원에 판매하고 있었는데

 

 

 

 

네이버쇼핑제품

 

 

 

 

동일한 제품이 네이버 쇼핑에서는 더 싸게 판매가 되고 있다.

 

 

 

 

 

위탁판매는 이미 남이 팔고 있는 제품에 마진을 붙여서 판매를 해야 하기에

 

절대 최저가가 될 순 없다.

 

하지만, 그럼에도 불구하고 최대한 싸게 판매하는 게 좋다.

 

 

 

 

 

이번에 살려볼 쇼핑몰에는 상품을 수정해서 올리거나 하려는 게 아니라,

코딩을 해서 그대로 복붙(?)을 하려고 한다.

 

물론 평생 이럴 건 아니고 일종의 실험이다.

 

 

 

 

그렇기에 일단은 최저가로 제공되는 쇼핑몰을 더 찾아보자.

 

 

 

 

 

 

 

영광문구몰

 

 

 

 

 

새로운 도매사이트를 찾아냈다.

위탁판매가 가능하고 당일 발송을 해주는 곳이다.

(홍보 아님)

 

 

내 소싱처를 공개하는 건 나한테 좋은 일이 아니다.

동일 제품을 경쟁하는 사람이 늘어나기 때문이다.

 

 

 

 

우린 이 쇼핑몰의 제품을 가져와서 1편에서 생성한 쇼핑몰에 올릴 예정이다.

 

 

 

 

 

 

 

payload = {
    "originProduct": {
        "statusType":"SALE",
        "saleType":"NEW",
        "leafCategoryId": 카테고리ID,
        "name": 상품명,
        "detailContent": 상품상세,
        "images":{
            "representativeImage":{"url":이미지경로}},
        "salePrice": 가격,
        "stockQuantity":9999,
        "deliveryInfo":{
            "deliveryType":"DELIVERY",
            "deliveryAttributeType":"NORMAL",
            "deliveryCompany":"CH1",
            "deliveryBundleGroupUsable":False,
            "deliveryFee":{
                "deliveryFeeType":배송타입,
                "baseFee":배송비,
                "deliveryFeePayType":"PREPAID",
                "deliveryFeeByArea":{
                    "deliveryAreaType":"AREA_3",
                    "area2extraFee":3000,
                    "area3extraFee":5000},
                "differentialFeeByArea":"상세정보참조"},
            "claimDeliveryInfo":{
                "returnDeliveryCompanyPriorityType":"PRIMARY",
                "returnDeliveryFee":반품배송비,
                "exchangeDeliveryFee":교환배송비,
                "shippingAddressId":주소지ID,
                "returnAddressId":주소지ID,
                "freeReturnInsuranceYn":False},
            "installationFee":False},
        "detailAttribute":{
            "naverShoppingSearchInfo":{
                "modelName":"상세정보참조",
                "manufacturerName":"상세정보참조",
                "brandName":"상세정보참조"},
            "afterServiceInfo":{
                "afterServiceTelephoneNumber":"CS연락처",
                "afterServiceGuideContent":"CS내용"},
            "originAreaInfo":{
                "originAreaCode":"04",
                "content":"기타"},
            "sellerCodeInfo":{
                "sellerManagementCode":판매자관리코드},
            "optionInfo":{
                "simpleOptionSortType":"CREATE",
                "optionSimple":[],
                "optionCustom":[],
                "optionCombinationSortType":"CREATE",
                "optionCombinationGroupNames":옵션1,
                "optionCombinations":옵션2},
            #    "useStockManagement":False,
            "taxType":"TAX",
            "certificationTargetExcludeContent":{
                "childCertifiedProductExclusionYn":True,
                "kcCertifiedProductExclusionYn":"TRUE"},
            "minorPurchasable":True,
            "productInfoProvidedNotice":{
                "productInfoProvidedNoticeType":"ETC",
                "etc":{
                    "returnCostReason":"0",
                    "noRefundReason":"0",
                    "qualityAssuranceStandard":"0",
                    "compensationProcedure":"0",
                    "troubleShootingContents":"0",
                    "itemName":"상세설명 참조",
                    "modelName":"상세설명 참조",
                    "certificateDetails":"상세설명 참조",
                    "manufacturer":"상세설명 참조",
                    "afterServiceDirector":"상세설명 참조"}},
            "productAttributes":상품속성},
        "customerBenefit":{
            "immediateDiscountPolicy":{
                "discountMethod":{
                    "value":50,
                    "unitType":"PERCENT"},
                "mobileDiscountMethod":{
                    "value":50,
                    "unitType":"PERCENT"}},
            "purchasePointPolicy":{
                "value":1,
                "unitType":"PERCENT"},
            "reviewPointPolicy":{
                "textReviewPoint":30,
                "photoVideoReviewPoint":30,
                "afterUseTextReviewPoint":30,
                "afterUsePhotoVideoReviewPoint":30,
                "storeMemberReviewPoint":30},
            "freeInterestPolicy":{"value":3},
            "giftPolicy":{"presentContent":"총알배송"},
            "multiPurchaseDiscountPolicy":{
                "discountMethod":{
                    "value":1,
                    "unitType":"PERCENT"},
                "orderValue":100,
                "orderValueUnitType":"COUNT"}}},
    "smartstoreChannelProduct":{
        "channelProductName":상품명,
        "naverShoppingRegistration":True,
        "channelProductDisplayStatusType":"ON"}}

 

 

 

 

 

네이버커머스 API를 사용해서 상품등록을 하기 위해선 위 payload가 필요하다.

 

 

 

카테고리 ID, 상품명, 상품상세, 대표이미지경로, 가격, 배송타입, 배송비, 반품배송비, 교환배송비, 주소지 ID, 상품코드, 옵션 1, 옵션 2, 상품속성

 

위 항목을 넣어주면 되는데

 

도매사이트에서 가져와야 할 정보는

상품명, 상품상세, 대표이미지경로, 가격, 배송타입, 배송비, 상품코드, 옵션 1, 옵션 2

이다.

 

 

 

 

 

네이버쇼핑 로직에는 카테고리가 매우 중요한데,

대부분의 도매사이트는 이걸 제공해주지 않는다.

 

우리가 직접 찾아내야 하는데, 가장 좋은 방법은 이미 다른 누군가가 등록한걸 그대로 사용하는 것.

 

 

 

 

카테고리에 대한 정보는 네이버 쇼핑에 똑같은 상품명으로 검색을 하고

나오는 제품들의 카테고리를 사용하면 된다.

 

 

 

def get_category(self, keyword):

    keyword = urllib.parse.quote(self.search_entry.get())
    url = f'https://search.shopping.naver.com/search/all?query={keyword}'

    headers = {
        'Referer': url,
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Whale/3.27.254.15 Safari/537.36'
    }

    response = requests.get(url=url, headers=headers)
    data = response.text.split('<script id="__NEXT_DATA__" type="application/json">')[1].split('</script>')[0]
    data = json.loads(data)

    itemlist = data['props']['pageProps']['initialState']['products']['list']

    for item in itemlist:
        category_names = [item['item'].get(f'category{i}Name') for i in range(1, 5)]
        category_names = [name for name in category_names if name]

        return '>'.join(category_names)

    return None

 

 

 

 

 

self.get_category(상품명)

 

을 하게 되면, 해당 상품명에 적합한 카테고리를 반환받게 된다.

 

 

 

 

 

 

 

 

 

자 그럼 이제 진짜로 해당 도매사이트에 모든 제품의 값(필요한 값만)들을 가져오자.

 

 

 

3편:

 

 

[위탁판매] Python 활용 쇼핑몰 자동화로 돈 벌기 - 3편

우리는 스마트스토어에 업로드를 하기로 했다.  하지만 일정을 변경해서 먼저 G마켓, 옥션에 자동으로 상품을 올려보자.        오너클랜도매쇼핑몰 B2B 배송대행 쇼핑몰창업 오픈마켓창업

myworld1004.tistory.com