Cara Web Scraping Shopee dengan Python

4 min read

webscrapping dengan python

Web Scraping Shopee

Kali ini saya akan membahas tentang web scrapping pada salah satu situs online shop 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.

Tutorial web scraping 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. Python yang kita gunakan pada tutorial ini adalah python versi 3 . Untuk editor saya menggunakan jupyter notebook anda dapat menggunakan editor lain seperti visual studio code atau pycharm atau editor lain sesuai dengan kesenangan kalian tapi pastikan editor tersebut support untuk coding python. Pada tutorial ini saya akan menggunakan library Beautiful Soup.

Beautiful Soup 

Beautiful Soup merupakan sebuah library Python yang memungkinkan kita untuk melakukan scraping dengan mudah dan cepat, keunggulan Beatutiful Soup adalah :

  1. Beautiful Soup hadir dengan metode-metode yang sederhana sehingga kita dengan mudah melakukan proses navigasi, pencarian dan juga modifikasi struktur data situs yang kita scraping.
  2. Beautiful Soup secara otomatis mampu menkonversi dokumen ke dalam format UTF-8.
  3. Bekerja dengan baik dengan library Python lxml dan html5lib untuk melakukan parsing dokumen.

Cara Scrape Web Shopee dengan Python

Untuk memulai proses coding pertama-tama kalian harus menginstall library Beautiful soup terlebih dahulu. Untuk menginstall library Beautiful soup dapat dilakukan dengan mengetikkan perintah pip3 install beautifulsoup tapi sebelumnya pastikan anda telah menginstall PIP terlebih dahulu dengan menggunakan perintah apt-get install python3-pip . Untuk kalian yang menggunakan Anaconda kalian dapat menginstall library Beautiful soup dengan menggunakan perintah conda untuk menggantikan pip. Setelah itu buka editor kalian dan buat sebuah file python baru pada editor yang kalian gunakan. Untuk yang menggunakan jupyter notebook anda dapat membuat file baru dengan menekan tombol new pada bagian pojok kanan atas kemudian pilih python3. 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="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'
        }
        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 :

https://shopee.co.id/api/v1/shop_ids_by_username/

Akan tetapi 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 :

https://shopee.co.id/api/v2/search_items/?match_id={}&order=desc&page_type=shop

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 :

Cara Web Scraping Shopee dengan Python

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 seperti pada gambar di bawah ini :

Cara Web Scraping Shopee

Dari gambar diatas diketahui terdapat dua hasi scrapping yang saya tandai menggunakan lingkaran merah dimana file dengan format json merupakan data semua produk yang terdapat pada toko yang telah kita lakukan scrapping . Untuk file dengan format html merupakan hasil crapping halaman toko. Sekian Artikel dari saya jika terdapat masalah dapat kalian tanyakan pada kolom komentar di bawah .

2 Replies to “Cara Web Scraping Shopee dengan Python”

  1. Bagaimana cara generate/mendapatkan/menentukan nilai header if-none-match- ? Karena tanpa header ini, response yang didapat kadang tidak lengkap (ada yang terpotong). Dan nilai ini berbeda-beda tiap url shopee (tapi tetap untuk satu url).

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *