eBay adalah platform online terkenal yang menawarkan peluang perdagangan dalam berbagai macam produk di antara para pengguna terdaftarnya. Dalam panduan ini, kami akan menjelaskan cara mengikis data dari daftar eBay menggunakan Python. Dengan demikian, kita akan tertarik pada detail yang tersedia dari daftar itu sendiri serta mengunjungi setiap produk secara bergantian untuk mendapatkan detail yang lebih baik.
Untuk memulai, pastikan Anda telah menginstal pustaka Python berikut ini:
Instal pustaka ini menggunakan:
pip install requests lxml pandas
Saat mencari produk di eBay, setiap URL halaman dapat dimodifikasi untuk menavigasi hasil yang dipaginasi. Sebagai contoh:
Parameter _pgn digunakan untuk menavigasi beberapa halaman daftar, memungkinkan pengambilan data yang luas. Mari kita mulai proses penggalian.
Untuk memulai, kita akan menyiapkan tajuk untuk meniru permintaan peramban yang sebenarnya, yang membantu menghindari deteksi dan potensi pemblokiran oleh tindakan anti-bot eBay. Kemudian kita akan mengirim permintaan ke halaman daftar untuk mengumpulkan tautan untuk setiap produk.
import requests
from lxml.html import fromstring
# Tentukan header untuk mensimulasikan peramban yang sebenarnya
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
# Meminta parameter untuk kueri penelusuran
params = {
'_nkw': 'laptop',
}
# Kirim permintaan ke halaman daftar eBay
listing_page_response = requests.get('https link', params=params, headers=headers)
listing_parser = fromstring(listing_page_response.text)
Pada halaman daftar, kita akan mengekstrak URL untuk masing-masing produk. Hal ini memungkinkan kita untuk mengunjungi setiap halaman produk untuk mendapatkan detail spesifik, seperti judul produk, harga, dan lainnya.
# Mengurai halaman daftar untuk mengekstrak tautan produk
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Keluarkan sampel tautan yang ditemukan
print("Product Links:", links[:5]) # Display the first five product links
Dengan URL produk di tangan, kita akan mengunjungi setiap halaman produk dan mengekstrak detail berikut:
Selanjutnya, kita akan mengulang setiap tautan dan menggunakan ekspresi XPath untuk menemukan informasi yang diperlukan pada halaman produk.
product_data = []
for url in links:
# Kirim permintaan ke halaman produk
product_page_response = requests.get(url, headers=headers)
product_parser = fromstring(product_page_response.text)
# Mengekstrak data menggunakan XPath
try:
product_title = product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0]
price = product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0]
shipping_cost = product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
product_condition = product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0]
available_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0]
sold_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1]
payment_options = ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label'))
return_policy = product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
# Menyimpan data dalam kamus
product_info = {
'Title': product_title,
'Price': price,
'Shipping Cost': shipping_cost,
'Condition': product_condition,
'Available Quantity': available_quantity,
'Sold Quantity': sold_quantity,
'Payment Options': payment_options,
'Return Policy': return_policy,
}
product_data.append(product_info)
except IndexError as e:
print(f"An error occurred: {e}")
Setelah mengumpulkan data, kita dapat menyimpannya ke dalam file CSV menggunakan Pandas.
import pandas as pd
# Mengonversi data ke DataFrame
df = pd.DataFrame(product_data)
# Simpan ke CSV
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
eBay menggunakan pembatasan harga untuk mencegah permintaan yang berlebihan. Berikut adalah beberapa metode untuk menghindari deteksi:
Dengan mengikuti praktik terbaik ini, Anda dapat meminimalkan risiko diblokir dan terus mengikis data secara efisien.
Berikut adalah kode lengkap untuk mengikis data eBay dan menyimpannya ke file CSV:
import requests
import random
from lxml.html import fromstring
import pandas as pd
useragents = ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36']
# Tentukan tajuk untuk permintaan
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': random.choice(useragents),
}
# Parameter kueri penelusuran
params = {'_nkw': 'laptop'}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Mengambil halaman daftar
listing_page_response = requests.get('https://www.ebay.com/sch/i.html', params=params, headers=headers, proxies=proxies)
listing_parser = fromstring(listing_page_response.text)
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Ekstrak data produk
product_data = []
for url in links:
product_page_response = requests.get(url, headers=headers, proxies=proxies)
product_parser = fromstring(product_page_response.text)
try:
product_info = {
'Title': product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0],
'Price': product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0],
'Shipping Cost': product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0],
'Condition': product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0],
'Available Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0],
'Sold Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1],
'Payment Options': ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label')),
'Return Policy': product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
}
product_data.append(product_info)
except IndexError:
continue
# Simpan ke CSV
df = pd.DataFrame(product_data)
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
Mengikis eBay dengan Python memungkinkan pengumpulan data yang efisien tentang produk, harga, dan tren. Dalam panduan ini, kami membahas pengikisan daftar, menangani pagination, mengatur header, dan menggunakan proxy untuk menghindari deteksi. Ingatlah untuk menghormati ketentuan layanan eBay dengan menggunakan interval permintaan yang bertanggung jawab dan rotasi proxy. Dengan alat bantu ini, Anda sekarang dapat dengan mudah mengumpulkan dan menganalisis data eBay untuk mendapatkan wawasan pasar. Selamat mengulik!
Komentar: 0