dramp77's picture
push code
8b114cb
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)