Scrape data shopee menggunakan python

SCRAPE DATA SHOPEE MENGGUNAKAN PYTHON

Kali ini saya akan membahas tentang web scrapping pada salah satu situs ecommerce yaitu shopee. Data Scrapping merupakan kegiatan untuk menemukan data dan mengumpulkannya. Data diambil secara langsung dari sebuah sumber, tidak hanya dari web tetapi bisa dari berbagai sumber dimana terdapat data. Ini mencakup spreadsheets, storage devices, dll. Proses ini diperlukan untuk menyaring (filtering) dan membedakan berbagai jenis data mentah dari berbagai sumber menjadi sesuatu yang berguna dan informatif. Sedangkan web scrapping sendiri merupakan proses data scrapping yang dilakukan hanya dari sumber website.Web scrapping ini sangat berguna pada bisnis online baik itu untuk riset pasar, riset kompetitor, atau mencari leads. Namun, manfaatnya lebih dari sekedar itu. Pada artikel kali ini saya akan membahas langkah-langkah web scraping pada salah satu website online shop yang cukup terkenal yaitu shopee. Untuk melakukan web scraping pada situs shopee ini kita akan menggunakan bahasa pemrograman python karena bahasa python sendiri yang mudah untuk diaplikasikan serta ketersediaan library-library pendukung yang sangat melimpah. Data yang akan kita hasilkan pada proses scrapping ini berupa data json. Untuk mendapatkan data dari web shopee kita menggunakan Api yang telah tersedia pada situs shopee yang dapat kita lihat ketika kita melakukan inspect elemen pada situs website shopee.

Sebelum memulai tutorial kali ini pastikan anda telah menginstall python pada laptop atau pc kalian. Jika belum kalian bisa mendownloadnya terlebih dahulu melalui situs python di python.org. Pada tutorial ini saya akan menggunakan library Beautiful Soup. Silahkan baca artikel saya sebelumnya mengenai beautifulSoup

Copykan script berikut pada file python baru yang kalian telah buat serta pastikan indentasinya sudah benar agar tidak terjadi error dikarenakan python sangat sensitif terhadap indentasi.

import requests
import json
from bs4 import BeautifulSoup
class Scrape:
    def __init__(self, USERNAME):
        REQ = requests.Session()
        print('Getting User ID..')
        USERID = self.GET_USERID(USERNAME, REQ)
        if USERID == False:
            print('User ID not found, try again..')
            return
        print('Getting Product list..')
        PRODUCTS = self.GET_PRODUCTS(USERID, REQ)
        if PRODUCTS == False:
            print('Product list not found, try again..')
            return
        print('Saving hTML page..')
        self.SAVE_PAGE(USERNAME, REQ)
        print('Complete...')
 
    def SAVE_PAGE(self, USERNAME, REQ):
        #url yang akan dilakukan scrapping datanya
        URL = "https://shopee.co.id/{}".format(USERNAME)
        #melakukan request data dengan metod get pada url Api
        RESPONSE = REQ.get(URL)
        #digunakan untuk men scrape semua data html
        SOUP = BeautifulSoup(RESPONSE.content, 'html.parser')
        # Menyimpan halaman utama toko dalam format html
        FILE_NAME = 'Shopee_{}.html'.format(USERNAME)
        with open(FILE_NAME, 'w') as file:
            return file.write(SOUP.prettify())
       
 
    def GET_USERID(self, USERNAME, REQ):
        HEADERS = {
            "accept-encoding": "gzip, deflate, br",
            "content-type": "application/json",
            "if-none-match": "55b03-1ae7d4aa7c47753a96c0ade3a9ea8b35",
            "origin": "https://shopee.co.id",
            "referer": "https://shopee.co.id/asusofficialshop",
            "x-api-source": "pc",
            "x-csrftoken": "8XtQ7bHlv09rlx5U4NPN6rmavFn7MvTO",
            "x-requested-with": "XMLHttpRequest",
            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
            "cookie": 'SPC_IA=-1; SPC_EC=-; SPC_F=QpolQhTSikpnxRXO6T4RjIW8ZGHNBmBn;
 REC_T_ID=ac80cdde-0e7d-11e9-a8c2-3c15fb3af585; SPC_T_ID="e4t1VmH0VKB0NajA1BrHaDQlFRwW
jTZT7o83rrHW+p16sTf1NJK7ksWWDicCTPq8CVO/S8sxnw25gNR0DLQz3cv7U3EQle9Z9ereUnPityQ=";
SPC_SI=k2en4gw50emawx5fjaawd3fnb5o5gu0w; SPC_U=-; SPC_T_IV="in3vKQSBLhXzeTaGwMInvg==";
 _gcl_au=1.1.557205539.1546426854; csrftoken=8XtQ7bHlv09rlx5U4NPN6rmavFn7MvTO;
welcomePkgShown=true; bannerShown=true; _ga=GA1.3.472488305.1546426857;
 _gid=GA1.3.1348013297.1546426857; _fbp=fb.2.1546436170115.11466858'
        }
        URL = "https://shopee.co.id/api/v1/shop_ids_by_username/"
        #url Api untuk get data nama toko berdasarkan ids tokonya
        DATA = {
            "usernames": [USERNAME]
        }
        GET_DATA = REQ.post(URL, headers=HEADERS, json=DATA)
        RESULT = GET_DATA.json()
        USERID = RESULT[0][USERNAME]
        return USERID
 
    def GET_PRODUCTS(self, USERID, REQ):
        HEADERS = {
            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
        }
        #url Api untuk get semua produk pada setiap toko
        URL = 'https://shopee.co.id/api/v2/search_items/?match_id={}
&order=desc&page_type=shop'.format(
            USERID
        )
        GET_DATA = REQ.get(URL, headers=HEADERS)
        RESULT = GET_DATA.json()
 
        # menyimpan data yang telah di scrapping dalam format json
        FILE_NAME = 'Shopee_{}.json'.format(USERID)
        with open(FILE_NAME, 'w') as file:
            json.dump(RESULT, file)
        return RESULT['items']
 
URL = input('Masukkan ID toko disini: ')
Scrape(URL)

Sedikit penjelasan dari scritb scrapping shopee tersebut kita menggunakan 2 buah url Api. Api yang pertama kita gunakan untuk mencari toko berdasarkan ids tokonya. Url Api yang digunakan pada proses pencarian nama toko ini adalah seperti berikut ini :

URL = "https://shopee.co.id/api/v1/shop_ids_by_username/"

Tapi saat mengakses Api tersebut kita membutuhkan sebuah Http header seperti berikut ini :

"accept-encoding": "gzip, deflate, br",
            "content-type": "application/json",
            "if-none-match": "55b03-1ae7d4aa7c47753a96c0ade3a9ea8b35",
            "origin": "https://shopee.co.id",
            "referer": "https://shopee.co.id/asusofficialshop",
            "x-api-source": "pc",
            "x-csrftoken": "8XtQ7bHlv09rlx5U4NPN6rmavFn7MvTO",
            "x-requested-with": "XMLHttpRequest",
            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
            "cookie": 'SPC_IA=-1; SPC_EC=-; SPC_F=QpolQhTSikpnxRXO6T4RjIW8ZGHNBmBn; REC_T_ID=ac80cdde-0e7d-11e9-a8c2-3c15fb3af585; SPC_T_ID="e4t1VmH0VKB0NajA1BrHaDQlFRwWjTZT7o83rrHW+p16sTf1NJK7ksWWDicCTPq8CVO/S8sxnw25gNR0DLQz3cv7U3EQle9Z9ereUnPityQ="; SPC_SI=k2en4gw50emawx5fjaawd3fnb5o5gu0w; SPC_U=-; SPC_T_IV="in3vKQSBLhXzeTaGwMInvg=="; _gcl_au=1.1.557205539.1546426854; csrftoken=8XtQ7bHlv09rlx5U4NPN6rmavFn7MvTO; welcomePkgShown=true; bannerShown=true; _ga=GA1.3.472488305.1546426857; _gid=GA1.3.1348013297.1546426857; _fbp=fb.2.1546436170115.11466858'
        }

Setelah tokonya ketemu kemudian kita lakukan scrapping data-data produknya pada toko tersebut dengan menggunakan url Api berikut ini :

 URL = 'https://shopee.co.id/api/v2/search_items/?match_id={}&order=desc&page_type=shop'.format(
            USERID
        )

Untuk mengaksesnya pun dibutuhkan header seperti berikut ini :

 "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

Setelah semuanya selesai kemudian jalankan scribt tersebut . Untuk yang menggunakan text editor jupyter notebook dapat dilakukan dengan menekan tombol run pada tabs di jupyter notebook atau bisa juga dengan menekan tombol CTRL+ENTER secara bersamaan. Anda dapat mulai melakukan scrapping data dari website shoppe sekarang hanya dengan menginputkan ids nama toko pada shopee yang dapat anda lihat ketika anda membuka profile toko yang akan anda scrape datanya seperti pada gambar berikut ini yang ditunjukkan pada nomor 1 :


copykan ids nama toko ke kolom yang telah tersedia saat program telah dijalankan kemudian enter dan tunggu proses scrapping datanya jika berhasil maka data hasil scrappingnya akan disimpan pada folder yang sama dengan file scribt program python yang kita buat .


*Referensi from web kodekreasi.com


JSON Data Shopee

{
  "itemid": 7938832916,
  "welcomePackageInfo": null,
  "liked": false,
  "recommendationInfo": null,
  "bundleDealInfo": null,
  "priceMaxBeforeDiscount": -1,
  "trackingInfo": {
    "multiSearchTracking": [0],
    "viralSpuTracking": null,
    "businessTracking": null
  },
  "image": "e6bed1bfed0133eb5823fbc3042bf828",
  "recommendationAlgorithm": null,
  "isCcInstallmentPaymentEligible": false,
  "shopid": 238466450,
  "canUseWholesale": false,
  "groupBuyInfo": null,
  "referenceItemId": "",
  "currency": "IDR",
  "rawDiscount": 0,
  "showFreeShipping": false,
  "videoInfoList": [],
  "adsKeyword": null,
  "collectionId": null,
  "images": ["e6bed1bfed0133eb5823fbc3042bf828"],
  "isPreferredPlusSeller": false,
  "priceBeforeDiscount": 0,
  "isCategoryFailed": false,
  "showDiscount": 0,
  "cmtCount": 0,
  "viewCount": 9,
  "displayName": null,
  "catid": 134,
  "jsonData": null,
  "upcomingFlashSale": null,
  "isOfficialShop": false,
  "brand": "MSI",
  "priceMin": 2562000000000,
  "likedCount": 1,
  "canUseBundleDeal": false,
  "showOfficialShopLabel": false,
  "coinEarnLabel": null,
  "priceMinBeforeDiscount": -1,
  "cbOption": 0,
  "sold": 0,
  "deductionInfo": null,
  "stock": 5,
  "status": 1,
  "priceMax": 2562000000000,
  "addOnDealInfo": null,
  "isGroupBuyItem": null,
  "flashSale": null,
  "price": 2562000000000,
  "shopLocation": "KOTA BANDUNG",
  "itemRating": {
    "ratingStar": 0,
    "ratingCount": [0, 0, 0, 0, 0, 0],
    "rcountWithImage": 0,
    "rcountWithContext": 0
  },
  "showOfficialShopLabelInTitle": false,
  "tierVariations": [],
  "isAdult": false,
  "discount": null,
  "flag": 0,
  "isNonCcInstallmentPaymentEligible": false,
  "hasLowestPriceGuarantee": false,
  "hasGroupBuyStock": null,
  "matchType": null,
  "previewInfo": null,
  "welcomePackageType": 0,
  "exclusivePriceInfo": null,
  "name": "MSI RTX 2080 Ti Gaming X Trio",
  "distance": null,
  "adsid": null,
  "ctime": 1592632842,
  "wholesaleTierList": [],
  "showShopeeVerifiedLabel": false,
  "campaignid": null,
  "showOfficialShopLabelInNormalPosition": null,
  "itemStatus": "normal",
  "shopeeVerified": false,
  "hiddenPriceDisplay": null,
  "sizeChart": null,
  "itemType": 0,
  "shippingIconType": null,
  "campaignStock": null,
  "labelIds": [1000031],
  "serviceByShopeeFlag": 0,
  "badgeIconType": 0,
  "historicalSold": 0,
  "transparentBackgroundImage": ""
}


Komentar

Postingan populer dari blog ini

Penyususan sketsa website toko online

Library BeautifulSoup dan Requests