eBay è una nota piattaforma online che offre opportunità di compravendita di un'ampia gamma di prodotti ai suoi utenti registrati. In questa guida spiegheremo come effettuare lo scraping di dati dalle inserzioni di eBay utilizzando Python. In questo caso, ci interesseranno i dettagli disponibili nell'inserzione stessa, ma anche quelli che si ottengono andando a vedere i singoli prodotti per avere maggiori dettagli.
Per iniziare, assicuratevi di avere installato le seguenti librerie Python:
Installare queste librerie utilizzando:
pip install requests lxml pandas
Quando si cercano prodotti su eBay, ogni URL di pagina può essere modificato per navigare tra i risultati paginati. Ad esempio:
Il parametro _pgn viene utilizzato per navigare tra più pagine di annunci, consentendo il recupero di numerosi dati. Iniziamo il processo di scraping.
Per iniziare, imposteremo le intestazioni in modo da imitare una vera richiesta del browser, per evitare il rilevamento e il potenziale blocco da parte delle misure anti-bot di eBay. Quindi invieremo una richiesta alla pagina dell'inserzione per raccogliere i link di ciascun prodotto.
import requests
from lxml.html import fromstring
# Definire le intestazioni per simulare un browser reale
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',
}
# Parametri della richiesta per la query di ricerca
params = {
'_nkw': 'laptop',
}
# Invia una richiesta alla pagina dell'inserzione eBay
listing_page_response = requests.get('https link', params=params, headers=headers)
listing_parser = fromstring(listing_page_response.text)
Nella pagina dell'elenco, estrarremo gli URL dei singoli prodotti. Questo ci permette di visitare ogni pagina di prodotto per raccogliere dettagli specifici, come il titolo del prodotto, il prezzo e altro ancora.
# Analizzare la pagina dell'inserzione per estrarre i link ai prodotti
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Un esempio dei collegamenti trovati
print("Product Links:", links[:5]) # Display the first five product links
Con gli URL dei prodotti in mano, visitiamo ogni pagina di prodotto ed estraiamo i seguenti dettagli:
Successivamente, si eseguirà il loop di ogni link e si utilizzeranno le espressioni XPath per individuare le informazioni richieste nella pagina del prodotto.
product_data = []
for url in links:
# Invia una richiesta alla pagina del prodotto
product_page_response = requests.get(url, headers=headers)
product_parser = fromstring(product_page_response.text)
# Estrarre i dati con 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]
# Memorizzare i dati in un dizionario
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}")
Dopo aver raccolto i dati, possiamo salvarli in un file CSV utilizzando Pandas.
import pandas as pd
# Convertire i dati in DataFrame
df = pd.DataFrame(product_data)
# Salva in CSV
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
eBay impiega il rate-limiting per evitare richieste eccessive. Ecco alcuni metodi per evitare il rilevamento:
Seguendo queste best practice, è possibile ridurre al minimo il rischio di essere bloccati e continuare a eseguire lo scraping dei dati in modo efficiente.
Ecco il codice completo per lo scraping dei dati di eBay e il loro salvataggio in un 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']
# Definire le intestazioni per la richiesta
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),
}
# Parametri di ricerca
params = {'_nkw': 'laptop'}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Recuperare la pagina dell'annuncio
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')
# Estrarre i dati del prodotto
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
# Salva in CSV
df = pd.DataFrame(product_data)
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
Lo scraping di eBay con Python consente di raccogliere dati efficienti su prodotti, prezzi e tendenze. In questa guida abbiamo trattato lo scraping delle inserzioni, la gestione della paginazione, l'impostazione delle intestazioni e l'uso dei proxy per evitare il rilevamento. Ricordate di rispettare i termini di servizio di eBay utilizzando intervalli di richiesta responsabili e la rotazione dei proxy. Grazie a questi strumenti, ora è possibile raccogliere e analizzare facilmente i dati di eBay per ottenere informazioni sul mercato. Buon scraping!
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0