Przewodnik po tym, jak skrobać dane Walmart za pomocą Pythona

Komentarze: 0

Analityka biznesowa, badania i analizy to tylko kilka z nieskończonych możliwości dostępnych dzięki skrobaniu stron internetowych. W pełni rozwinięty podmiot biznesowy, taki jak Walmart, zapewnia nam idealną strukturę do zbierania niezbędnych informacji. Możemy łatwo skrobać dane Walmart, takie jak nazwa, cena i informacje o recenzjach z ich wielu stron internetowych przy użyciu różnych technik skrobania.

W tym artykule omówimy proces: jak skrobać dane Walmart. Będziemy używać żądań do wysyłania żądań HTTP i lxml do analizowania zwróconych dokumentów HTML.

Dlaczego warto używać Pythona do skrobania danych Walmart?

Jeśli chodzi o skrobanie danych produktów w wielu witrynach detalicznych, Python jest jedną z najbardziej efektywnych dostępnych opcji. Oto jak płynnie integruje się z projektami ekstrakcji:

  1. Zaawansowane biblioteki. Istnienie żądań do interakcji z siecią i lxml do parsowania HTML oznacza, że możesz skrobać rozległe katalogi online z najwyższą łatwością i skutecznością.
  2. Łatwość użycia. Dzięki łatwej w użyciu składni, użytkownicy mogą programować procesy pobierania danych z niewielkim lub żadnym wcześniejszym doświadczeniem, a tym samym od razu przejść do pracy.
  3. Wsparcie społeczności. Złożoność związana z witrynami detalicznymi oznacza, że istnieje mnóstwo kwalifikujących się zasobów i wsparcia ze strony społeczności, które pomogą ci rozwiązać pojawiające się problemy.
  4. Obsługa danych. Dogłębna analiza. Z pomocą Pandas do obsługi danych i Matplotlib do wizualnej reprezentacji, Python umożliwia użytkownikowi analizę danych na szerszą skalę, takich jak gromadzenie i analiza.
  5. Zarządzanie dynamiczną zawartością. Dzięki Selenium możliwa staje się interakcja z dynamicznymi elementami sieci, co zapewnia gromadzenie obszernych danych, nawet ze stron ładowanych przez JavaScript.
  6. Efektywne skalowanie. Dzięki możliwości zarządzania ogromnymi i drobnymi zbiorami danych, Python działa wyjątkowo dobrze przez długi czas, nawet gdy jest poddawany intensywnym działaniom związanym z ekstrakcją danych.

Wykorzystanie takiego języka w projektach w branży detalicznej nie tylko upraszcza aspekt techniczny, ale także zwiększa wydajność i zakres analizy, co czyni go najlepszym wyborem dla ekspertów dążących do zdobycia dogłębnej wiedzy o rynku. Aspekty te mogą być szczególnie przydatne, gdy zdecydujemy się na skrobanie danych Walmart.

Teraz zacznijmy od zbudowania narzędzia do skrobania stron internetowych Walmart.

Konfiguracja środowiska do skrobania danych Walmart

Aby rozpocząć, upewnij się, że Python jest zainstalowany na twoim komputerze. Wymagane biblioteki można pobrać za pomocą pip:


pip install requests
pip install  lxml
pip install urllib3

Teraz zaimportujmy takie biblioteki jak:

  • requests - do pobierania stron internetowych za pośrednictwem protokołu HTTP;
  • lxml - do generowania drzew dokumentów HTML;
  • CSV - do zapisywania zebranych danych w plikach CSV;
  • random - dla proxy i wyboru łańcucha agenta użytkownika.

import requests
from lxml import html
import csv
import random
import urllib3
import ssl

Definiowanie adresów URL produktów

Listę adresów URL produktów do zeskrobania danych Walmart można dodać w następujący sposób.


product_urls = [
    'link with https',
    'link with https',
    'link with https'
]

Ciągi agenta użytkownika i serwery proxy

Podczas skrobania stron internetowych Walmart, kluczowe jest przedstawienie prawidłowych nagłówków HTTP, zwłaszcza nagłówka User-Agent, w celu naśladowania rzeczywistej przeglądarki. Co więcej, systemy antybotowe witryny można również obejść za pomocą rotacyjnych serwerów proxy. W poniższym przykładzie przedstawiono ciągi User-Agent wraz z instrukcjami dodawania autoryzacji serwera proxy według adresu IP.


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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]

Nagłówki dla żądań

Nagłówki żądań powinny być ustawione w sposób ukrywający je jako pochodzące z przeglądarki użytkownika. Będzie to bardzo pomocne podczas próby zeskrobania danych Walmart. Oto przykład, jak to będzie wyglądać:


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',
    'dnt': '1',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    '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',
}

Inicjalizacja magazynu danych

Podstawowym krokiem jest stworzenie struktury, która będzie akceptować informacje o produkcie.


product_details = []

Wyliczanie stron URL działa w następujący sposób: Dla każdej strony URL inicjowane jest żądanie GET z losowo wybranym User-Agent i proxy. Po zwróceniu odpowiedzi HTML jest ona analizowana pod kątem szczegółów produktu, w tym nazwy, ceny i recenzji. Odpowiednie szczegóły są zapisywane w słownikowej strukturze danych, która jest później dodawana do wcześniej utworzonej listy.


for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # Wysłanie żądania HTTP GET do adresu URL
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # Parsowanie zawartości HTML przy użyciu lxml
   parser = html.fromstring(response.text)
   # Wyodrębnij tytuł produktu
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # Wyodrębnij cenę produktu
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # Szczegóły przeglądu wyciągu
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # Przechowywanie wyodrębnionych szczegółów w słowniku
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # Dołącz szczegóły produktu do listy
   product_details.append(product_detail)

Tytuł:

1.png

Cena:

2.png

Szczegóły recenzji:

3.png

Zapisywanie danych do CSV

  1. Utwórz nowy plik, określając CSV jako typ pliku i ustaw go na tryb zapisu.
  2. Określ nazwy pól (kolumn) pliku CSV.
  3. Aby zapisać słowniki do pliku CSV, należy utworzyć obiekt csv.DictWriter.
  4. Zapisz wiersz nagłówka pliku CSV.
  5. Dla każdego słownika w product_details wykonaj pętlę i zapisz słownik jako wiersz w pliku CSV.

with open('walmart_products.csv', 'w', newline='') as csvfile:
    fieldnames = ['title', 'price', 'review_details']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for product_detail in product_details:
        writer.writerow(product_detail)

Kompletny kod

Gdy Web Scraping Walmart, kompletny skrypt Pythona będzie wyglądał tak, jak podano poniżej. Poniżej znajdują się również komentarze ułatwiające zrozumienie każdej sekcji.


import requests
from lxml import html
import csv
import random
import urllib3
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# Lista adresów URL produktów do zeskrobania danych Walmart
product_urls = [
   'link with https',
   'link with https',
   'link with https'
]

# Losowe ciągi User-Agent zapewniające anonimowość
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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

# Lista proxy dla rotacji adresów IP
proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]


# Nagłówki naśladujące żądania przeglądarki
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',
   'dnt': '1',
   'priority': 'u=0, i',
   'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
   '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',
}

# Zainicjuj pustą listę do przechowywania szczegółów produktu
product_details = []

# Pętla przez każdy adres URL produktu
for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # Wysłanie żądania HTTP GET do adresu URL
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # Parsowanie zawartości HTML przy użyciu lxml
   parser = html.fromstring(response.text)
   # Wyodrębnij tytuł produktu
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # Wyodrębnij cenę produktu
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # Szczegóły przeglądu wyciągu
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # Przechowywanie wyodrębnionych szczegółów w słowniku
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # Dołącz szczegóły produktu do listy
   product_details.append(product_detail)

# Zapis wyodrębnionych danych do pliku CSV
with open('walmart_products.csv', 'w', newline='') as csvfile:
   fieldnames = ['title', 'price', 'review_details']
   writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
   writer.writeheader()
   for product_detail in product_details:
       writer.writerow(product_detail)

Dodatkowe sugestie

Dla tych, którzy używają Pythona do łączenia się z API Walmart, kluczowe jest opracowanie solidnych metod, które skutecznie skrobią ceny Walmart i wyniki recenzji Walmart. Ten interfejs API zapewnia bezpośredni dostęp do obszernych danych o produktach, ułatwiając analizę cen i opinii klientów w czasie rzeczywistym.

Zastosowanie tych konkretnych strategii zwiększa precyzję i zakres gromadzonych informacji, umożliwiając firmom szybkie dostosowanie się do zmian rynkowych i trendów konsumenckich. Dzięki strategicznemu zastosowaniu Walmart API w Pythonie, firmy mogą zoptymalizować swoje procesy gromadzenia danych, zapewniając kompleksową analizę rynku i świadome podejmowanie decyzji.

Wnioski

W tym samouczku wyjaśniliśmy, jak używać bibliotek Pythona do skrobania danych Walmart i zapisywania ich w pliku CSV do późniejszej analizy. Podany skrypt jest podstawowy i służy jako punkt wyjścia, który można zmodyfikować w celu poprawy wydajności procesu skrobania. Ulepszenia mogą obejmować dodanie losowych interwałów czasowych między żądaniami w celu symulacji przeglądania przez ludzi, wykorzystanie agentów użytkownika i serwerów proxy do maskowania bota oraz wdrożenie zaawansowanej obsługi błędów w celu radzenia sobie z przerwami lub awariami skrobania.


Komentarze:

0 komentarze