Jak skrobać strony e-commerce za pomocą Pythona
Podsumowanie wygenerowane przez AI:
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.
Pisanie skryptu do skrobania danych e-commerce
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.
Krok 1. Zrozumienie struktury HTML strony internetowej
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.).
Krok 2. Wysyłanie żądań HTTP
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}")
Krok 3. Wyodrębnianie danych przy użyciu XPath i lxml
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)
Krok 4. Rozwiązywanie potencjalnych problemów
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)
Krok 5. Zapisywanie danych do pliku CSV
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}")
Kompletny kod
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.
Ecommerce Data Scraping: Przemyślenia końcowe
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.
Czy masz kompetencje?
Zostań autorem partnerskim na korzystnych warunkach
Treść artykułu:
Czy masz kompetencje?
Zostań autorem partnerskim na korzystnych warunkach
