Mengungkap informasi dari pengecer elektronik seperti AliExpress dapat sangat bermanfaat untuk mengumpulkan informasi produk, memantau fluktuasi harga, mengumpulkan ulasan, dan sebagainya. Pada artikel ini, kita akan mengeksplorasi proses memperoleh informasi tentang produk (seperti nama, harga, peringkat, dll.) dan juga mengulas ulasan produk scraping. Kami juga akan mendemonstrasikan cara membuat scraper dinamis dengan mengoper URL produk, secara otomatis mengambil ID produk, dan menyimpan data ke dalam file CSV.
Tutorial ini akan menggunakan Playwright untuk merender konten dinamis dan permintaan untuk mengambil data ulasan. Kami juga akan memastikan scraper beretika dan mematuhi praktik terbaik.
Sebelum memulai, pastikan Anda telah menginstal pustaka Python berikut ini:
Anda dapat menginstal paket-paket ini dengan menjalankan perintah berikut:
# Menginstal Playwright
pip install playwright
# Menginstal Requests
pip install requests
# Instal lxml untuk mengurai HTML
pip install lxml
# Instal Panda untuk manipulasi dan penyimpanan data
pip install pandas
Setelah menginstal Playwright, Anda juga perlu menginstal binari peramban yang diperlukan:
playwright install
Ini akan mengunduh dan menyiapkan browser yang diperlukan agar Playwright berfungsi dengan baik.
Halaman produk AliExpress bersifat dinamis, artinya halaman tersebut memuat konten melalui JavaScript. Untuk menanganinya, kita akan menggunakan Playwright, sebuah pustaka Python yang memungkinkan Anda untuk mengontrol peramban tanpa kepala dan berinteraksi dengan konten dinamis.
Berikut ini cara Anda mengirim permintaan dan menavigasi ke halaman produk:
from playwright.async_api import async_playwright
async def get_page_content(url):
async with async_playwright() as p:
# Luncurkan browser dengan proxy jika diperlukan (dapat dihapus jika tidak menggunakan proxy)
browser = await p.firefox.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto(url, timeout=60000)
# Mengekstrak konten halaman
content = await page.content()
await browser.close()
return content
# Contoh URL
url = 'https://www.aliexpress.com/item/3256805354456256.html'
Setelah kita memiliki konten halaman, kita dapat mengekstrak data produk menggunakan kueri lxml dan XPath. Kita akan mengumpulkan detail seperti judul produk, harga, peringkat, jumlah ulasan, dan jumlah barang yang terjual.
from lxml.html import fromstring
def extract_product_data(content):
parser = fromstring(content)
# Mengekstrak detail produk menggunakan XPath
title = parser.xpath('//h1[@data-pl="product-title"]/text()')[0].strip()
price = parser.xpath('//div[@class="price--current--I3Zeidd product-price-current"]/span/text()')[0].strip()
rating = ' '.join(parser.xpath('//a[@class="reviewer--rating--xrWWFzx"]/strong/text()')).strip()
total_reviews = parser.xpath('//a[@class="reviewer--reviews--cx7Zs_V"]/text()')[0].strip()
sold_count = parser.xpath('//span[@class="reviewer--sold--ytPeoEy"]/text()')[0].strip()
product_data = {
'title': title,
'price': price,
'rating': rating,
'total_reviews': total_reviews,
'sold_count': sold_count
}
return product_data
Kode ini menggunakan XPath untuk mengekstrak detail produk yang relevan dari konten HTML halaman.
AliExpress memiliki titik akhir API terpisah untuk mengambil ulasan produk. Anda dapat mengekstrak ID produk dari URL secara dinamis dan menggunakannya untuk mengambil ulasan melalui permintaan. Dalam fungsi ini:
import requests
def extract_product_id(url):
# Ekstrak ID produk dari URL
product_id = url.split('/')[-1].split('.')[0]
return product_id
def scrape_reviews(product_id, page_num=1, page_size=10):
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'en-IN,en;q=0.9',
'referer': f'https://www.aliexpress.com/item/{product_id}.html',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
params = {
'productId': product_id,
'lang': 'en_US',
'country': 'US',
'page': str(page_num),
'pageSize': str(page_size),
'filter': 'all',
'sort': 'complex_default',
}
response = requests.get('https://feedback.aliexpress.com/pc/searchEvaluation.do', params=params, headers=headers)
reviews = response.json()['data']['evaViewList']
# Ekstrak teks ulasan saja
review_texts = [review['buyerFeedback'] for review in reviews]
return review_texts
Setelah mengikis detail produk dan ulasan, kita menyimpan data ini ke dalam file CSV menggunakan pustaka pandas.
import pandas as pd
def save_to_csv(product_data, reviews, product_id):
# Menyimpan detail produk ke CSV
df_product = pd.DataFrame([product_data])
df_product.to_csv(f'product_{product_id}_data.csv', index=False)
# Menyimpan ulasan ke CSV
df_reviews = pd.DataFrame({'reviews': reviews})
df_reviews.to_csv(f'product_{product_id}_reviews.csv', index=False)
print(f"Data saved for product {product_id}.")
Detail produk dan ulasan disimpan ke dalam file CSV terpisah dengan ID produk yang disertakan dalam nama file untuk memudahkan identifikasi.
Berikut adalah cara kerja alur kerja dinamis yang lengkap:
# Ekstrak ID produk dari URL
def extract_product_id(url):
return url.split('/')[-1].split('.')[0]
from playwright.async_api import async_playwright
from lxml.html import fromstring
import requests
import pandas as pd
# Dapatkan konten halaman menggunakan Playwright
async def get_page_content(url):
async with async_playwright() as p:
browser = await p.firefox.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto(url, timeout=60000)
content = await page.content()
await browser.close()
return content
# Ekstrak data produk
def extract_product_data(content):
parser = fromstring(content)
title = parser.xpath('//h1[@data-pl="product-title"]/text()')[0].strip()
price = parser.xpath('//div[@class="price--current--I3Zeidd product-price-current"]/span/text()')[0].strip()
rating = ' '.join(parser.xpath('//a[@class="reviewer--rating--xrWWFzx"]/strong/text()')).strip()
total_reviews = parser.xpath('//a[@class="reviewer--reviews--cx7Zs_V"]/text()')[0].strip()
sold_count = parser.xpath('//span[@class="reviewer--sold--ytPeoEy"]/text()')[0].strip()
return {
'title': title,
'price': price,
'rating': rating,
'total_reviews': total_reviews,
'sold_count': sold_count
}
# Ekstrak ID produk dari URL
def extract_product_id(url):
return url.split('/')[-1].split('.')[0]
# Mengikis ulasan
def scrape_reviews(product_id, page_num=1, page_size=10):
headers = {
'accept': 'application/json, text/plain, */*',
'referer': f'https://www.aliexpress.com/item/{product_id}.html',
'user-agent': 'Mozilla/5.0'
}
params = {
'productId': product_id,
'lang': 'en_US',
'page': str(page_num),
'pageSize': str(page_size),
}
response = requests.get('https://feedback.aliexpress.com/pc/searchEvaluation.do', params=params, headers=headers)
reviews = response.json()['data']['evaViewList']
return [review['buyerFeedback'] for review in reviews]
# Menyimpan data dan ulasan produk ke CSV
def save_to_csv(product_data, reviews, product_id):
pd.DataFrame([product_data]).to_csv(f'product_{product_id}_data.csv', index=False)
pd.DataFrame({'reviews': reviews}).to_csv(f'product_{product_id}_reviews.csv', index=False)
print(f'Saved into: product_{product_id}_data.csv')
print(f'Saved into: product_{product_id}_reviews.csv')
# Fungsi utama
async def main(url):
content = await get_page_content(url)
product_data = extract_product_data(content)
product_id = extract_product_id(url)
reviews = scrape_reviews(product_id)
save_to_csv(product_data, reviews, product_id)
# Jalankan pengikis
import asyncio
url = 'https://www.aliexpress.com/item/3256805354456256.html'
asyncio.run(main(url))
Saat mengambil data, penting untuk mengikuti pedoman etika:
Mengikuti panduan ini akan membantu Anda mengikis secara etis dan bertanggung jawab, meminimalkan risiko bagi pengguna dan sistem AliExpress.
Komentar: 0