
Scrape Data Shopee dengan Request dan BeutifulSoup
Seperti tutorial yang kemaren kita terlebih dahulu harus sudah menginstall library Request dan BeutifulSoup anda di VS Code atau program python anda.
Dengan adanya library tersebut kita dengan cara ini bisa mengambil data shopee dalam bentuk json yang nantinya data json tersebut bisa kita gunakan sebagai json untuk website e-commers atau yang lain yang kita buat nantinya.Sehingga website yang kita buat nantinya hampir sama dengan shopee dalam segi isinya.
Langsung saja tanpa basa basi kita belajar cara menscrape datanya
Pertama
Tentunya kita harus buka terlebih dahulu website shopee nya di link https://shopee.co.id/ pastinya temen-temen sudah mengetahui apa saja sih isinya shopee tersebut pastinya segala yang kita butuhkan ada disitu. Seperti halnya toko atau swalayan,namun bentuknya digital.
Nah ya seperti itulah tampilan websitenya .
Tapi tenang saja kita tidak akan memilah satu persatu bagiannya kok kita hanya akan mengambil datanya saja kita jadikan data json nantinya kita bisa membuat duplikat website yang hampir mirip dengan itu....oke
Kedua
Selanjutnya setelah kita mengetahui yang diatas kita mulai buat programnya dengan menggunakan bahasa pemrograman python.
kita import request,beutifullSoup dan json nya
import requests
import json
from bs4 import BeautifulSoup
Setelah semua itu kita langsung buat script selanjutnya nantinya untuk memanggil jsonnya kita hanya perlu tahu nama id yang akan kita panggil nanti, next
Kalau tadi itu adalah awalan kita langsung sekarang masuk pada bagian prosesnya disitu nantinya terdapat banyak sintak mulai dari class sampai fuction
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=QpolQhTSikpnxRXO6T4RjIW8
ZGHNBmBn; REC_T_ID=ac80cdde-0e7d-11e9-a8c2-3c15fb3af585; SPC_T_ID="e4t1VmH
0VKB0NajA1BrHaDQlFRwWjTZT7o83rrHW+p16sTf1NJK7ksWWDicCTPq8CVO/S8sxnw25gNR0DL
Qz3cv7U3EQle9Z9ereUnPityQ="; SPC_SI=k2en4gw50emawx5fjaawd3fnb5o5gu0w; SPC_U
=-; SPC_T_IV="in3vKQSBLhXzeTaGwMInvg=="; _gcl_au=1.1.557205539.1546426854; c
srftoken=8XtQ7bHlv09rlx5U4NPN6rmavFn7MvTO; welcomePkgShown=true; bannerShow
n=true; _ga=GA1.3.472488305.1546426857; _gid=GA1.3.1348013297.1546426857; _f
bp=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']
Selanjutnya kita buat inputan yang akan kita gunakan dalam memanggil id toko yang akan kita panggil
URL = input('Masukkan ID toko disini: ')
Scrape(URL)
Lengkapnya
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/S8sxnw25gNR0DLQz3cv7U3EQle9Z9
reUnPityQ="; 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=d
esc&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)
Ketiga
Selanjutnya kita akan prakktek untuk mencoba menscrape data shopee
Setelah kita running kita bisa masukkan id toko yang kita,disini saya akan mencoba dengan nama id toko = fettynilnamuna
jika kita sudah masukkan id tokonya pasti secara otomatis dalam folder kita muncul 2 folder baru,file html dan file json hasil scrape data toko tersebut. disitu saya sudah mendapatkan 2 file yang bernama Shopee_fettynilnamuna.html dan Shopee_68229931.json
Nah kita sekarang sudah dapat file jsonnya selanjutnya kita bisa membuat desain htmlnya dan kita masukkan file jsonnya.
Disini saya akan membuat file html yang desainnya hampir sama dengan shopee agar kita mudah untuk menerapkannya.
disini saya akan mempraktekkan feath data json ke html dengan menggunakan java script kita bisa menggunakan metode lain
file json yang kita dapat bernama Shopee_68229931.json
kita buat file java script nya yang sudah kita hubungkan dengan file html yang kita buat tadi
// fetch
var elements = `<div class="row mx-0 mt-2" style="height: 200px">`;
var parent = document.getElementById("product");
var idx = 0;
fetch("scrape/Shopee_68229931.json")
.then((response) => response.json())
.then((json) =>
json.items.forEach((element) => {
idx++;
console.log(idx)
elements += `
<div class="col-2 pl-0">
<div
class="d-flex flex-column h-100"
style="background-color: #ffffff"
>
<div
class="w-100 h-75 position-relative"
style="background-color: #f53d2d"
>
<img
class="w-100 h-100 position-absolute"
src= ${element.images}"
alt=""
/>
</div>
<div class="w-100 d-flex flex-column px-2">
<span>${element.name}</span>
<div
class="
w-100
pb-2
d-flex
justify-content-between
align-items-center
mt-2
"
>
<span style="color: #f53d2d; font-size: 14px"
>Id${element.itemid} </span
>
<span style="color: #888; font-size: 12px"
>10+ Terjual</span
>
</div>
</div>
</div>
</div>
`;
if (idx % 6 == 0 && idx < json.items.length) {
elements += `</div><div class="row mx-0 mt-2" id="product" style="height: 200px">`;
}
if (idx == json.items.length) {
elements += `</div>`;
console.log(json.items.length)
parent.innerHTML = elements;
}
})
);
Kita disitu akan membuat kolom atau tabel nama produck id dan gambar namun nantinya hasil feactnya tidak muncul image nya karna data image dari json kita tidak bentuk jpg.
Itu lah hasil scrape dan feath data json to html dan itu masih belum sempurna...... terima kasih dan sampai jumpa di pertemuan selanjutnya..ok