Skrobanie danych e-commerce w celu uzyskania szczegółowych informacji o produktach jest przydatne do przeprowadzania analizy konkurencji, monitorowania cen i przeprowadzania badań rynkowych. Skrobanie danych ze stron produktów można wygodnie wykonać za pomocą Pythona. Ten samouczek dotyczący skrobania danych e-commerce pokaże ci, jak zbierać informacje za pomocą kombinacji żądań i lxml ze sklepów internetowych.
Skrobanie stron internetowych dla e-commerce polega na pobieraniu informacji o produkcie, takich jak tytuł, cena lub numer identyfikacyjny ze sklepów internetowych. Liczne biblioteki dostępne w Pythonie sprawiają, że jest to nie tylko łatwe, ale i dość wydajne. W tym artykule skupimy się na skrobaniu stron internetowych e-commerce za pomocą Pythona. Naszym obiektem będzie strona internetowa Costco.
Na początek upewnijmy się, że mamy wszystkie dostępne narzędzia do skrobania e-commerce w Pythonie lub biblioteki, których będziemy potrzebować do tego skryptu:
pip install requests
pip install lxml
Skoncentrujemy się na wyodrębnianiu nazw produktów, funkcji i marek z określonych stron w witrynie.
Aby rozpocząć tworzenie skrobaka produktów e-commerce, należy najpierw zrozumieć strukturę danej strony internetowej. Przejdź do witryny i otwórz stronę, z której chcesz zbierać informacje, i sprawdź wymagane elementy (np. nazwę produktu, cechy, markę itp.).
Najpierw zaimportujemy bibliotekę żądań, aby wysłać GET specjalnie dla stron produktów. Ponadto skonfigurujemy nagłówki żądań, aby przypominały żądanie przeglądarki.
import requests
# Lista adresów URL produktów do zeskrobania
urls = [
"https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
"https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]
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-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Przeprowadź pętlę przez każdy adres URL i wyślij żądanie GET
for url in urls:
response = requests.get(url, headers=headers)
if response.status_code == 200:
html_content = response.text
# Dalsze przetwarzanie zostanie dodane w kolejnych krokach
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Dzięki lxml wyodrębnimy pożądane informacje z html. Ma to kluczowe znaczenie w przypadku skrobania danych e-commerce.
from lxml import html
# Lista do przechowywania zeskrobanych danych
scraped_data = []
# Przeprowadź pętlę przez każdy adres URL i wyślij żądanie GET
for url in urls:
response = requests.get(url)
if response.status_code == 200:
html_content = response.content
# Parsowanie zawartości HTML za pomocą lxml
tree = html.fromstring(html_content)
# Wyodrębnianie danych przy użyciu XPath
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Dołącz wyodrębnione dane do listy
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# Drukowanie zeskrobanych danych
for item in scraped_data:
print(item)
Kiedy próbujemy zeskrobać witrynę e-commerce za pomocą Pythona, musimy zrozumieć, że większość witryn ma jakąś formę oprogramowania antybotowego. Korzystanie z serwerów proxy i rotacyjnych agentów użytkownika może pomóc złagodzić ich podejrzenia.
Korzystanie z serwerów proxy z autoryzacją IP:
proxies = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)
Obracający się agenci użytkownika:
import random
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# W razie potrzeby dodaj więcej agentów użytkownika
]
headers['user-agent'] = random.choice(user_agents)
response = requests.get(url, headers=headers)
Ostatecznie wyodrębnione dane zostaną zapisane w formacie CSV, dzięki czemu będę mógł je później przeanalizować pod kątem bardziej zaawansowanego procesu skrobania danych e-commerce.
import csv
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# Zapisywanie danych do pliku CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
print(f"Error occurred while writing data to {csv_file}")
Oto ostateczna wersja skryptu do skutecznego skrobania danych e-commerce. Można go skopiować i wkleić w celu łatwego użycia.
import requests
import urllib3
from lxml import html
import csv
import random
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Lista adresów URL produktów do zeskrobania
urls = [
"https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
"https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]
# headers
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-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Lista agentów użytkownika dla żądań rotacyjnych
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# W razie potrzeby dodaj więcej agentów użytkownika
]
# Lista pełnomocników dla żądań rotacyjnych
proxies = [
{'http': 'http://your_proxy_ip:your_proxy_port', 'https': 'https://your_proxy_ip:your_proxy_port'},
{'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
# W razie potrzeby dodaj więcej serwerów proxy
]
# Lista do przechowywania zeskrobanych danych
scraped_data = []
# Przeprowadź pętlę przez każdy adres URL i wyślij żądanie GET
for url in urls:
# Wybierz losowego agenta użytkownika dla nagłówków żądań
headers['user-agent'] = random.choice(user_agents)
# Wybierz losowy serwer proxy dla żądania
proxy = random.choice(proxies)
# Wyślij żądanie HTTP GET do adresu URL z nagłówkami i proxy
response = requests.get(url, headers=headers, proxies=proxy, verify=False)
if response.status_code == 200:
# Przechowuje zawartość HTML z odpowiedzi
html_content = response.content
# Parsowanie zawartości HTML za pomocą lxml
tree = html.fromstring(html_content)
# Wyodrębnianie danych przy użyciu XPath
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Dołącz wyodrębnione dane do listy
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
# Wydruk komunikatu o błędzie w przypadku niepowodzenia żądania
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# Konfiguracja pliku CSV
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# Zapisywanie danych do pliku CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
# Wyświetla komunikat o błędzie, jeśli zapis do pliku nie powiedzie się
print(f"Error occurred while writing data to {csv_file}")
Python ecommerce scraper jest teraz kompletny.
Wykorzystanie skrobaka internetowego dla sklepu internetowego Costco pokazuje, jak skuteczny może być Python w pozyskiwaniu danych produktowych do analizy i podejmowania optymalnych decyzji biznesowych. Dzięki odpowiednim skryptom i bibliotekom Requests oraz Lxml zapewniającym zautomatyzowane ekstraktory, możliwe jest skrobanie witryny bez żadnych przerw w przepływie pracy spowodowanych przez interfejs API zapobiegający botom. Wreszcie, ważne jest, aby zawsze przestrzegać przepisów etycznych podczas skrobania stron internetowych e-commerce.
Komentarze: 0