File size: 1,963 Bytes
8b114cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import requests
import pandas as pd
from datetime import datetime

# URL API Shopee
base_url = "https://shopee.co.id/api/v2/item/get_ratings"
params = {
    "exclude_filter": 1,
    "filter": 0,
    "filter_size": 0,
    "flag": 1,
    "fold_filter": 0,
    "itemid": 5283031042,  # Ganti dengan item ID yang ingin di-scrape
    "limit": 20,           # Jumlah review per permintaan
    "offset": 0,           # Awal pagination
    "relevant_reviews": "false",
    "request_source": 2,
    "shopid": 52733860,    # Shop ID terkait
    "tag_filter": "",
    "type": 0,
    "variation_filters": ""
}

# Dataframe untuk menyimpan hasil
reviews = {"username": [], "rating": [], "comment": [], "date": [], "images": []}

# Loop untuk iterasi pagination
while True:
    response = requests.get(base_url, params=params)
    
    if response.status_code != 200:
        print("Error: Failed to fetch data.")
        break

    data = response.json()

    # Periksa apakah ada data dalam "ratings"
    if "data" not in data or "ratings" not in data["data"]:
        print("No more ratings found.")
        break

    for rating in data["data"]["ratings"]:
        reviews["username"].append(rating.get("author_username", "Unknown"))
        reviews["rating"].append(rating.get("rating_star", "N/A"))
        reviews["comment"].append(rating.get("comment", "No comment"))
        reviews["date"].append(
            datetime.utcfromtimestamp(rating.get("ctime", 0)).strftime("%Y-%m-%d %H:%M")
        )
        reviews["images"].append(", ".join(rating.get("images", [])))

    # Jika jumlah data kurang dari limit, berarti sudah di halaman terakhir
    if len(data["data"]["ratings"]) < params["limit"]:
        break

    # Tambah offset untuk pagination
    params["offset"] += params["limit"]

# Simpan data ke dalam file CSV
df = pd.DataFrame(reviews)
print(df)
df.to_csv("shopee_reviews.csv", index=False)