Meteen naar de inhoud

De ultieme gids voor het schrapen van Amazon met Python (2023)

Het schrapen van gegevens van Amazon, een van de grootste e-commerceplatforms, kan waardevolle inzichten opleveren. Of u nu prijzen wilt vergelijken, klantbeoordelingen wilt analyseren of de beschikbaarheid van producten wilt volgen, webscraping kan een handig hulpmiddel zijn. Deze gids biedt gedetailleerde instructies en Python-codevoorbeelden voor het schrapen van Amazon.

Webschrapende ethiek

Voordat we erin duiken, is het belangrijk op te merken dat scrapen op verantwoorde wijze moet worden gedaan om de vraag naar de servers van de website te minimaliseren. Een manier om dit te doen, is door u te concentreren op de Amazon-zoekpagina waar u basisproductgegevens kunt extraheren, zoals naam, prijs, afbeeldings-URL, beoordeling en aantal recensies. Deze aanpak zal het aantal verzoeken dat u bij Amazon moet indienen aanzienlijk verminderen, waardoor uw scraper sneller en goedkoper te gebruiken is.

Python Web Scraping-bibliotheken

Python biedt een overvloed aan bibliotheken voor webscraping, en het kiezen van de juiste hangt af van uw specifieke behoeften en mate van comfort met Python. Hier zijn enkele van de meest gebruikte bibliotheken:

  1. Aanvragen: Een populaire Python-bibliotheek voor het maken van HTTP-verzoeken. Het abstraheert de complexiteit van het doen van verzoeken achter een eenvoudige API, waardoor u HTTP/1.1-verzoeken kunt verzenden met verschillende methoden zoals GET, POST en andere.
  2. Mooie soep: Het wordt gebruikt voor het ontleden van HTML- en XML-documenten en het extraheren van gegevens. Het creëert een ontleedboom van de paginabroncode die kan worden gebruikt om gegevens op een hiërarchische en beter leesbare manier te extraheren.
  3. Scrapy: Een open-source Python-framework dat speciaal is ontworpen voor webscraping. Het is een veelzijdig framework dat een breed scala aan scraping-taken aankan en in staat is om grote datasets te scrapen.
  4. Selenium: Een krachtig hulpmiddel voor het besturen van een webbrowser via het programma. Het is erg handig voor webscraping omdat het alle soorten website-inhoud aankan, inclusief door JavaScript gegenereerde inhoud. Het maakt ook gebruikersinteractie mogelijk, zoals klikken, scrollen, enz.
  5. perceel: Gebruikt voor het extraheren van gegevens uit HTML en XML met behulp van XPath- en CSS-kiezers. Het is bovenop de lxml-bibliotheek gebouwd, waardoor het flexibel en gebruiksvriendelijk is.

Productgegevens schrappen van Amazon-zoekpagina's

De eerste stap bij het schrapen van Amazon is het extraheren van gegevens van de zoekpagina's. Voor deze taak kunnen de Python Requests- en Parsel-bibliotheken worden gebruikt. Hier is een voorbeeldscript dat productgegevens van alle beschikbare Amazon-zoekpagina's voor een bepaald zoekwoord (bijv. 'iPad') ophaalt:

importverzoeken van parsel import Selector van urllib.parse import urljoin keyword_list = ['ipad'] product_overview_data = [] voor trefwoord in keyword_list: url_list = [f'https://www.amazon.com/s?k={keyword} &page=1'] voor url in url_list: probeer: response = requests.get(url) if response.status_code == 200: sel = Selector(text=response.text) # Extract Product Page search_products = sel.css("div .s-result-item[data-component-type=s-search-result]") voor product in search_products: relative_url = product.css("h2>a::attr(href)").get() asin = relative_url.split('/')[3] if len(relative_url.split('/')) >= 4 else Geen product_url = urljoin('https://www.amazon.com/', relative_url).split( "?")[0] product_overview_data.append( { "keyword": keyword, "asin": asin, "url": product_url, "ad": True if "/slredirect/" in product_url else False, "title": product.css("h2>a>span::text").get(), "price-data-a-size=xl .a-offscreen::text").get(), "real_price": product. css(".a-price[data-a-size=b] .a-offscreen::text").get(), "rating": (product.css("span[aria-label~=stars]: :attr "rating_count": product.css("span[aria-label~=stars] + span::attr(aria-label)").get(), "thumbnail_url": product.xpath("//img[ has-class('s-image')]/@src").get(), } ) # Get All Pages if "&page=1" in url: available_pages = sel.xpath( '//a[has-class ("s-pagination-item")][not(has-class("s-pagination-separator"))]/text()' ).getall() voor pagina in available_pages: search_url_paginated = f'https:// www.amazon.com/s?k={keyword}&page={page}' url_list.append(search_url_paginated) behalve uitzondering als e: print("Error", e)

Dit script verzamelt een reeks productgegevens, elk weergegeven als een woordenboek met de volgende sleutels:

  • keyword: het gebruikte zoekwoord (bijv. 'iPad')
  • asin: Het unieke Amazon Standard Identification Number van het product
  • url: De URL van het product
  • ad: Een Booleaanse waarde die aangeeft of het product een advertentie is
  • title: De titel van het product
  • price: De prijs van het product
  • real_price: De oorspronkelijke prijs van het product vóór eventuele kortingen
  • rating: De beoordeling van het product
  • rating_count: Het aantal beoordelingen dat het product heeft gekregen
  • thumbnail_url: De URL van de miniatuurafbeelding van het product

Het script identificeert ook alle beschikbare pagina's voor het zoekwoord en voegt ze toe aan het url_list voor schrapen【9†bron】.

Productgegevens schrappen van Amazon-productpagina's

Zodra u een lijst met Amazon-product-URL's heeft, kunt u alle productgegevens van elke individuele Amazon-productpagina schrapen. Hier is een voorbeeldscript dat de Python Requests- en Parsel-bibliotheken gebruikt om dit te doen:

importeer opnieuw importeer verzoeken van parsel import Selector van urllib.parse import urljoin product_urls = [ 'https://www.amazon.com/2021-Apple-10-2-inch-iPad-Wi-Fi/dp/B09G9FPHY6/ref= sr_1_1', ] product_data_list = [] for product_url in product_urls: try: response = requests.get(product_url) if response.status_code == 200: sel = Selector(text=response.text) image_data = json.loads(re.findall (r"colorImages':.*'initial':\s*(\[.+?\])},\n", response.text)[0]) variant_data = re.findall(r'dimensionValuesDisplayData"\s *:\s* ({.+?}),\n', response.text) feature_bullets = [bullet.strip() voor opsommingsteken in sel.css("#feature-bullets li ::text").getall( )] prijs = sel.css('.a-price span[aria-hidden="true"] ::text').get("") indien geen prijs: prijs = sel.css('.a-price . a-offscreen ::text').get("") product_data_list.append({ "name": sel.css("#productTitle::text").get("").strip(), "price": prijs, "stars": sel.css("i[data-hook=average-star-rating] ::text").get("").strip(), "rating_count": sel.css("div[ data-hook=total-review-count] ::text").get("").strip(), "feature_bullets": feature_bullets, "images": image_data, "variant_data": variant_data, }) behalve uitzondering als e : afdrukken("Fout",e)

Dit script verzamelt een reeks productgegevens, waarbij elk product wordt weergegeven als een woordenboek met de volgende sleutels:

  • name: De naam van het product
  • price: De prijs van het product
  • stars: de sterbeoordeling van het product
  • rating_count: Het totale aantal beoordelingen dat het product heeft ontvangen
  • feature_bullets: Een lijst met de functie-opsommingstekens van het product
  • images: Een lijst met afbeeldingen in hoge resolutie van het product
  • variant_data: Gegevens over de varianten van het product (bijv. verschillende kleuren of maten beschikbaar)

Het is vermeldenswaard dat dit script is ontworpen om gegevens te extraheren van productpagina's met een specifieke lay-out. Als Amazon de lay-out van zijn productpagina's wijzigt, moet het script mogelijk worden bijgewerkt【11†bron】.

Aanvullende overwegingen

Hoewel de bovenstaande scripts een startpunt bieden voor het scrapen van Amazon, zijn er aanvullende overwegingen waarmee rekening moet worden gehouden voor een complete en robuuste scraping-oplossing:

1. Omgaan met dynamische inhoud

Sommige Amazon-productpagina's gebruiken dynamische inhoud, waarvoor JavaScript is vereist om te laden. Als u deze pagina's probeert te schrapen met de hierboven beschreven methoden, kan het zijn dat sommige van de gewenste gegevens ontbreken. In deze gevallen moet u een tool gebruiken die JavaScript kan weergeven, zoals Selenium of Puppeteer.

2. Robots.txt respecteren

Amazon's robots.txt bestand vertelt webcrawlers welke pagina's ze mogen bezoeken. Hoewel dit bestand niet wettelijk bindend is, kan het negeren ervan ertoe leiden dat uw IP-adres wordt verbannen. Het is het beste om de robots.txt bestand om mogelijke problemen te voorkomen.

3. Tariefbeperking

Amazon kan het aantal verzoeken beperken dat u in een bepaalde periode kunt doen. Als u te snel te veel verzoeken indient, kan Amazon uw IP-adres blokkeren proxy's voor Amazon. Om dit te voorkomen, kunt u technieken gebruiken zoals het beperken van uw verzoeken of wisselende IP-adressen.

4. Ethische overwegingen

Webscraping kan een grote belasting vormen voor de server van een website, dus het is belangrijk om verantwoord te scrapen. Als u de gegevens die u nodig hebt uit minder pagina's kunt halen, is het ethischer om dat te doen. Als u bijvoorbeeld alleen basisproductgegevens nodig heeft (naam, prijs, afbeeldings-URL, beoordeling, aantal beoordelingen, enz.), kunt u deze gegevens van de zoekpagina's schrapen in plaats van de productpagina's, waardoor u minder verzoeken hoeft te doen maken met een factor 20.


Tot slot, hoewel webscraping een krachtig hulpmiddel kan zijn voor het extraheren van gegevens van websites zoals Amazon, is het belangrijk om deze technieken op verantwoorde wijze te gebruiken en met respect voor de servicevoorwaarden van de website en de eisen die u aan de servers stelt.

Doe mee aan het gesprek

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *