Μάθετε πώς να κάνετε Scrape προϊόντων Amazon με Python

Τελευταία ενημέρωση στις April 16, 2026

Αν έχεις ακολουθήσει κανένα tutorial για Amazon scraping και στο τέλος έπεσες πάνω σε CAPTCHA, σφάλματα 503 ή τελείως άδεια αποτελέσματα — καλωσόρισες στο κλαμπ. Οι περισσότεροι οδηγοί Python για Amazon scraping που κυκλοφορούν online γράφτηκαν το 2022 ή το 2023 και βασίζονται σε selectors και τεχνικές που η Amazon έχει εδώ και καιρό αλλάξει ή διορθώσει.

Έχω περάσει χρόνια χτίζοντας εργαλεία εξαγωγής δεδομένων στη Thunderbit και κάτι που μπορώ να σου πω από πρώτο χέρι είναι το εξής: η Amazon είναι από τα πιο δύσκολα sites για αξιόπιστο scraping. Η πλατφόρμα αλλάζει συνεχώς τη δομή HTML της, έχει άμυνα έξι επιπέδων ενάντια στα bots και μάλιστα δείχνει διαφορετικά layouts σε διαφορετικούς χρήστες μέσω A/B testing. Σε αυτόν τον οδηγό θα σου δείξω έναν Python Amazon scraper που δουλεύει στ’ αλήθεια το 2025 — με επαληθευμένα CSS selectors, πολυεπίπεδη στρατηγική αποφυγής αποκλεισμού και πρακτικές για scheduling και εξαγωγή δεδομένων που τα περισσότερα tutorials αγνοούν εντελώς. Και για όσους θέλουν απλώς τα δεδομένα χωρίς να μπλέξουν με Python, θα δείξω επίσης πώς το μπορεί να κάνει την ίδια δουλειά σε περίπου δύο κλικ.

Τι είναι το Amazon Product Scraping;

Το Amazon product scraping είναι η διαδικασία προγραμματισμένης εξαγωγής δημόσια διαθέσιμων δεδομένων — όπως ονόματα προϊόντων, τιμές, αξιολογήσεις, αριθμοί κριτικών, εικόνες, διαθεσιμότητα και άλλα — από τις σελίδες προϊόντων και τα αποτελέσματα αναζήτησης της Amazon. Αντί να αντιγράφεις με το χέρι πληροφορίες από εκατοντάδες καταχωρίσεις, ένα scraper επισκέπτεται κάθε σελίδα, διαβάζει το HTML και μαζεύει τα δεδομένα που ορίζεις σε δομημένη μορφή, όπως CSV, Excel ή βάση δεδομένων.

Σκέψου το σαν να προσλαμβάνεις έναν ακούραστο intern που μπορεί να τσεκάρει χίλιες σελίδες προϊόντων στον χρόνο που εσύ πίνεις τον πρωινό σου καφέ. Μόνο που αυτός ο intern δεν κάνει ποτέ ορθογραφικά λάθη και δεν ζητάει διάλειμμα για φαγητό.

Γιατί να κάνεις Scrape προϊόντων Amazon με Python;

Η Amazon φιλοξενεί περίπου σε 30+ κατηγορίες, με τη στήριξη περίπου . Οι πωλητές τρίτων πλέον αντιστοιχούν στο 69% του συνολικού GMV. Η χειροκίνητη παρακολούθηση ακόμη και ενός μικρού κομματιού αυτού του καταλόγου είναι πρακτικά αδύνατη. Να γιατί οι ομάδες κάνουν scrape στην Amazon:

ΧρήσηΠοιοι ωφελούνταιΤι εξάγουν
Παρακολούθηση τιμών & repricingEcommerce ops, marketplace sellersΤιμές, διαθεσιμότητα, στοιχεία πωλητή
Ανάλυση ανταγωνισμούProduct managers, brand teamsΧαρακτηριστικά προϊόντων, αξιολογήσεις, αριθμοί κριτικών
Έρευνα αγοράςAnalysts, νέες ομάδες προϊόντωνΤάσεις κατηγορίας, κατανομές τιμών
Lead generationSales teamsΟνόματα πωλητών, στοιχεία brand, στοιχεία επικοινωνίας
Affiliate marketingContent creators, deal sitesΤιμές, προσφορές, λεπτομέρειες προϊόντων
Παρακολούθηση αποθεμάτωνSupply chain, procurementΚατάσταση stock, εκτιμήσεις παράδοσης

Η κλίμακα των αλλαγών τιμών στην Amazon από μόνη της κάνει την αυτοματοποίηση απαραίτητη: η Amazon αλλάζει τιμές , ενώ η μέση τιμή ενός προϊόντος ενημερώνεται περίπου κάθε 10 λεπτά. Αντίθετα, ανταγωνιστές όπως η Best Buy και η Walmart αλλάζουν τιμές μόλις περίπου 50.000 φορές τον μήνα. Καμία ανθρώπινη ομάδα δεν μπορεί να συμβαδίσει.

amazon-product-price-monitor-dashboard.webp

Η Python σου δίνει πλήρη έλεγχο στη διαδικασία scraping — αποφασίζεις τι θα εξαγάγεις, πώς θα χειριστείς τα σφάλματα και πού θα αποθηκεύσεις τα δεδομένα. Όμως αυτό σημαίνει επίσης ότι εσύ αναλαμβάνεις τη συντήρηση, την αποφυγή αποκλεισμού και την παρακολούθηση των συχνών αλλαγών HTML της Amazon.

Τι μπορείς να κάνεις Scrape από την Amazon (και τι όχι)

Από δημόσια προσβάσιμες σελίδες προϊόντων, συνήθως μπορείς να εξαγάγεις:

  • Τίτλο προϊόντος (όνομα, brand)
  • Τιμή (τρέχουσα, αρχική, τιμή προσφοράς)
  • Αξιολόγηση (μέσος όρος αστεριών)
  • Αριθμό κριτικών
  • Εικόνες προϊόντος (κύριο image URL)
  • Διαθεσιμότητα / κατάσταση stock
  • ASIN (Amazon Standard Identification Number)
  • Περιγραφή προϊόντος και bullet points
  • Στοιχεία πωλητή
  • Παραλλαγές προϊόντος (μέγεθος, χρώμα κ.λπ.)

Αυτό που πρέπει να αποφεύγεις:

  • Δεδομένα πίσω από login: εκτεταμένες σελίδες κριτικών, προσωπικά δεδομένα λογαριασμού, ιστορικό παραγγελιών
  • Προσωπικές πληροφορίες: ονόματα αγοραστών, διευθύνσεις, στοιχεία πληρωμής
  • Πνευματικά προστατευμένο περιεχόμενο για αναδημοσίευση: οι περιγραφές προϊόντων και οι εικόνες είναι οκ για ανάλυση, αλλά όχι για να τις παρουσιάζεις ως δικές σου

Το της Amazon μπλοκάρει πάνω από 50 bots με όνομα (συμπεριλαμβανομένων των GPTBot, Scrapy και ClaudeBot) και απαγορεύει paths όπως λογαριασμούς χρηστών, καλάθια και wishlists. Οι σελίδες λεπτομερειών προϊόντων δεν απαγορεύονται ρητά, όμως οι Όροι Χρήσης της Amazon απαγορεύουν την αυτοματοποιημένη πρόσβαση. Τα δικαστήρια συνήθως ξεχωρίζουν τις παραβιάσεις ToS (αστικό ζήτημα) από τις ποινικές παραβιάσεις βάσει του CFAA — περισσότερα για τη νομιμότητα στο τέλος του οδηγού.

Εργαλεία και βιβλιοθήκες που θα χρειαστείς

Αυτό είναι το Python stack για το tutorial:

ΒιβλιοθήκηΣκοπόςΓιατί τη χρησιμοποιούμε
requestsHTTP requestsΑπλό, ευρέως υποστηριζόμενο
beautifulsoup4Ανάλυση HTMLΕύκολη εξαγωγή με CSS selectors
lxmlΓρήγορος HTML parserΧρησιμοποιείται ως parser backend του BeautifulSoup
curl_cffiTLS fingerprint impersonationΚρίσιμο για παράκαμψη της ανίχνευσης της Amazon
pandasΔόμηση και εξαγωγή δεδομένωνDataFrames, εξαγωγή σε CSV/Excel

Προαιρετικά (για περιεχόμενο που αποδίδεται με JavaScript):

  • selenium ή playwright — αυτοματοποίηση headless browser

Ρύθμιση του Python περιβάλλοντός σου

Άνοιξε το terminal και τρέξε:

1mkdir amazon-scraper && cd amazon-scraper
2python -m venv venv
3source venv/bin/activate  # On Windows: venv\Scripts\activate
4pip install requests beautifulsoup4 lxml curl_cffi pandas

Επιβεβαίωσε ότι όλα εγκαταστάθηκαν:

1import requests, bs4, curl_cffi, pandas
2print("Όλα καλά!")

Αν δεις το "Όλα καλά!" χωρίς σφάλματα, είσαι έτοιμος.

laptop-coding-workspace.webp

Γιατί τα περισσότερα Amazon scraping tutorials χαλάνε (και γιατί αυτό είναι διαφορετικό)

Αυτό είναι το σημείο που τα περισσότερα guides το προσπερνούν, και είναι ακριβώς ο λόγος που πιθανότατα διαβάζεις αυτό το άρθρο.

Η Amazon ενημερώνει συχνά τη δομή HTML, τα class names και τα element IDs της. Η κοινότητα του scraping αναφέρει ότι λόγω αλλαγών στο DOM και στο fingerprinting. Το πιο διαβόητο θύμα; Ο selector #priceblock_ourprice, που εμφανιζόταν σε εκατοντάδες tutorials από το 2018 έως το 2023. Αυτό το ID δεν υπάρχει πλέον στις σελίδες προϊόντων της Amazon.

Μια γρήγορη σύγκριση ανάμεσα σε αυτά που έχουν σπάσει και σε αυτά που δουλεύουν τώρα:

Σημείο δεδομένωνΣπασμένος selector (πριν το 2024)Selector που δουλεύει το 2025
Τιμή#priceblock_ourpricediv#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen
Τίτλος#productTitlespan#productTitle (ακόμη λειτουργεί)
Αξιολόγησηspan.a-icon-alt (μερικές φορές λάθος context)#acrPopover span.a-icon-alt
Αριθμός κριτικών#acrCustomerReviewCountspan#acrCustomerReviewText
Διαθεσιμότητα#availability spandiv#availability span.a-size-medium

Κάθε code snippet σε αυτόν τον οδηγό δοκιμάστηκε σε live σελίδες Amazon το 2025. Θα σου δείξω τους πραγματικούς CSS selectors μαζί με το αναμενόμενο output — όχι αντιγραφή από tutorial του 2022.

Πριν ξεκινήσεις

  • Δυσκολία: Μεσαίο επίπεδο (απαιτούνται βασικές γνώσεις Python)
  • Χρόνος: ~30–45 λεπτά για το πλήρες tutorial· ~10 λεπτά για τον βασικό scraper
  • Τι θα χρειαστείς: Python 3.9+, Chrome browser (για επιθεώρηση σελίδων Amazon), terminal και προαιρετικά το αν θέλεις να συγκρίνεις τη no-code προσέγγιση

Βήμα 1: Στείλε το πρώτο σου request στην Amazon

Πήγαινε σε οποιαδήποτε σελίδα προϊόντος της Amazon στο browser σου και αντέγραψε το URL. Θα ξεκινήσουμε με ένα απλό requests.get():

1import requests
2url = "https://www.amazon.com/dp/B0DGNFM9YJ"
3response = requests.get(url)
4print(response.status_code)
5print(response.text[:500])

Τρέξε αυτό και σχεδόν σίγουρα θα πάρεις 503 status code ή μια σελίδα που λέει "To discuss automated access to Amazon data please contact…". Αυτό είναι το WAF (Web Application Firewall) της Amazon που εντοπίζει το Python script σου. Ένα σκέτο requests.get() χωρίς σωστά headers πετυχαίνει περίπου απέναντι στην Amazon.

Θα δεις κάτι σαν: 503 και μια block page στο HTML. Αυτό είναι αναμενόμενο — θα το φτιάξουμε στο επόμενο βήμα.

Βήμα 2: Ρύθμισε custom headers και TLS impersonation

Το να προσθέσεις απλώς ένα User-Agent header δεν αρκεί πια. Η Amazon συγκρίνει τα HTTP headers σου με το TLS fingerprint σου. Αν δηλώσεις ότι είσαι Chrome 120 αλλά το TLS handshake αποκαλύπτει τη βιβλιοθήκη requests της Python, θα σε σημαδέψει .

Η πιο αξιόπιστη προσέγγιση το 2025 είναι η χρήση του curl_cffi με browser impersonation:

1from curl_cffi import requests as cfreq
2headers = {
3    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
4    "Accept-Language": "en-US,en;q=0.9",
5    "Accept-Encoding": "gzip, deflate, br",
6    "Referer": "https://www.google.com/",
7    "DNT": "1",
8    "Connection": "keep-alive",
9    "Upgrade-Insecure-Requests": "1",
10}
11url = "https://www.amazon.com/dp/B0DGNFM9YJ"
12response = cfreq.get(url, headers=headers, impersonate="chrome124")
13print(response.status_code)
14print(len(response.text))

Με το curl_cffi να κάνει impersonation ως Chrome 124, τα success rates ανεβαίνουν περίπου στο — 47 φορές καλύτερα από το απλό requests. Τώρα θα πρέπει να δεις 200 status code και πολύ πιο μεγάλο HTML response (100.000+ χαρακτήρες).

Αν εξακολουθείς να παίρνεις 503, δοκίμασε άλλο impersonate value (π.χ. "chrome131") ή βάλε μια μικρή καθυστέρηση πριν ξαναδοκιμάσεις.

Βήμα 3: Ανάλυσε το HTML και εξήγαγε δεδομένα προϊόντος

Τώρα που έχουμε το πλήρες HTML, ας εξαγάγουμε τα δεδομένα με το BeautifulSoup και επαληθευμένα 2025 selectors:

1from bs4 import BeautifulSoup
2soup = BeautifulSoup(response.text, "lxml")
3# Τίτλος προϊόντος
4title_el = soup.select_one("span#productTitle")
5title = title_el.get_text(strip=True) if title_el else None
6# Τιμή
7price_el = soup.select_one(
8    "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
9)
10if not price_el:
11    price_el = soup.select_one("span.priceToPay .a-offscreen")
12if not price_el:
13    price_el = soup.select_one(".apexPriceToPay .a-offscreen")
14price = price_el.get_text(strip=True) if price_el else None
15# Αξιολόγηση
16rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17rating = rating_el.get_text(strip=True) if rating_el else None
18# Αριθμός κριτικών
19reviews_el = soup.select_one("span#acrCustomerReviewText")
20reviews = reviews_el.get_text(strip=True) if reviews_el else None
21# Διαθεσιμότητα
22avail_el = soup.select_one("div#availability span")
23availability = avail_el.get_text(strip=True) if avail_el else None
24# Κύριο URL εικόνας
25img_el = soup.select_one("#landingImage")
26image_url = img_el.get("src") if img_el else None
27print(f"Τίτλος: {title}")
28print(f"Τιμή: {price}")
29print(f"Αξιολόγηση: {rating}")
30print(f"Κριτικές: {reviews}")
31print(f"Διαθεσιμότητα: {availability}")
32print(f"Εικόνα: {image_url}")

Αναμενόμενο output (παράδειγμα):

1Τίτλος: Apple AirPods Pro (2nd Generation) with USB-C
2Τιμή: $189.99
3Αξιολόγηση: 4.7 out of 5 stars
4Κριτικές: 98,432 ratings
5Διαθεσιμότητα: In Stock
6Εικόνα: https://m.media-amazon.com/images/I/61SUj2...

Πρόσεξε ότι υπάρχουν πολλαπλοί fallback selectors για την τιμή — η Amazon χρησιμοποιεί διαφορετικά containers ανάλογα με τον τύπο προϊόντος, την κατάσταση προσφοράς και τη μεταβλητή A/B test. Το να τυλίγεις κάθε εξαγωγή σε έναν condition check αποτρέπει το scraper σου από το να καταρρεύσει όταν ένας selector δεν ταιριάξει.

Βήμα 4: Κάνε scrape σε πολλά προϊόντα από τα αποτελέσματα αναζήτησης

Για να στήσεις ένα πραγματικό dataset, θα θέλεις να ξεκινήσεις από μια σελίδα αποτελεσμάτων αναζήτησης της Amazon, να μαζέψεις ASINs και μετά να κάνεις scrape σε κάθε σελίδα λεπτομερειών προϊόντος.

1import time
2import random
3def get_search_asins(keyword, max_pages=1):
4    """Συλλέγει ASINs από τα αποτελέσματα αναζήτησης της Amazon."""
5    asins = []
6    for page in range(1, max_pages + 1):
7        search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
8        resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
9        if resp.status_code != 200:
10            print(f"Η σελίδα αναζήτησης {page} επέστρεψε {resp.status_code}")
11            break
12        search_soup = BeautifulSoup(resp.text, "lxml")
13        results = search_soup.select('div[data-component-type="s-search-result"]')
14        for r in results:
15            asin = r.get("data-asin")
16            if asin:
17                asins.append(asin)
18        print(f"Σελίδα {page}: βρέθηκαν {len(results)} προϊόντα")
19        time.sleep(random.uniform(2, 5))  # Ευγενική καθυστέρηση
20    return asins
21asins = get_search_asins("wireless+earbuds", max_pages=2)
22print(f"Συλλέχθηκαν {len(asins)} ASINs")

Κάθε ASIN αντιστοιχεί σε ένα καθαρό URL προϊόντος: https://www.amazon.com/dp/{ASIN}. Αυτό είναι πιο αξιόπιστο από τα πλήρη URLs των αποτελεσμάτων αναζήτησης, τα οποία μπορεί να περιέχουν session-specific παραμέτρους.

Βήμα 5: Χειρίσου την pagination και κάνε scrape σε μεγάλη κλίμακα

Ας συνδυάσουμε τώρα τη συλλογή από αναζήτηση και το scraping της σελίδας λεπτομερειών σε ένα πλήρες pipeline:

1import pandas as pd
2def scrape_product(asin):
3    """Κάνει scrape σε μία σελίδα λεπτομερειών προϊόντος Amazon."""
4    url = f"https://www.amazon.com/dp/{asin}"
5    try:
6        resp = cfreq.get(url, headers=headers, impersonate="chrome124")
7        if resp.status_code != 200:
8            return None
9        soup = BeautifulSoup(resp.text, "lxml")
10        title_el = soup.select_one("span#productTitle")
11        price_el = (
12            soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
13            or soup.select_one("span.priceToPay .a-offscreen")
14            or soup.select_one(".apexPriceToPay .a-offscreen")
15        )
16        rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17        reviews_el = soup.select_one("span#acrCustomerReviewText")
18        avail_el = soup.select_one("div#availability span")
19        img_el = soup.select_one("#landingImage")
20        return {
21            "asin": asin,
22            "title": title_el.get_text(strip=True) if title_el else None,
23            "price": price_el.get_text(strip=True) if price_el else None,
24            "rating": rating_el.get_text(strip=True) if rating_el else None,
25            "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
26            "availability": avail_el.get_text(strip=True) if avail_el else None,
27            "image_url": img_el.get("src") if img_el else None,
28            "url": url,
29        }
30    except Exception as e:
31        print(f"Σφάλμα κατά το scraping του {asin}: {e}")
32        return None
33# Scrape όλων των ASINs που συλλέξαμε
34products = []
35for i, asin in enumerate(asins):
36    print(f"Scraping {i+1}/{len(asins)}: {asin}")
37    product = scrape_product(asin)
38    if product:
39        products.append(product)
40    time.sleep(random.uniform(2, 5))  # Τυχαία καθυστέρηση ανάμεσα στα requests
41df = pd.DataFrame(products)
42print(f"\nΕξήχθησαν επιτυχώς {len(df)} προϊόντα")
43print(df.head())

Η τυχαία καθυστέρηση μεταξύ 2–5 δευτερολέπτων είναι κρίσιμη. Η απόλυτα σταθερή χρονική συμπεριφορά (π.χ. ακριβώς 3 δευτερόλεπτα κάθε φορά) φαίνεται ύποπτη στα behavioral analysis συστήματα της Amazon. Τα τυχαία διαστήματα μιμούνται τον τρόπο που περιηγείται ένας άνθρωπος.

Βήμα 6: Αποθήκευσε τα scraped δεδομένα της Amazon σε CSV

1df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
2print("Αποθηκεύτηκε στο amazon_products.csv")

Τώρα θα έχεις ένα καθαρό CSV με στήλες για ASIN, τίτλο, τιμή, αξιολόγηση, κριτικές, διαθεσιμότητα, URL εικόνας και URL προϊόντος. Εδώ σταματούν τα περισσότερα tutorials — αλλά αν χτίζεις ένα πραγματικό workflow, το CSV είναι μόνο η αρχή.

Αναλυτικά για το Anti-Blocking: Πώς να κρατήσεις τον scraper σου σε λειτουργία

Το να σε μπλοκάρουν είναι το για όποιον προσπαθεί να κάνει scrape προϊόντων Amazon με Python. Η άμυνα έξι επιπέδων της Amazon περιλαμβάνει ανάλυση φήμης IP, TLS fingerprinting, ελέγχους περιβάλλοντος browser, behavioral biometrics, CAPTCHA και anomaly detection με ML. Παρακάτω φαίνεται μια πολυεπίπεδη στρατηγική για να αντιμετωπίσεις καθένα από αυτά.

Εναλλαγή User-Agents και πλήρων headers

Ένα μόνο στατικό User-Agent εντοπίζεται γρήγορα. Κάνε rotate σε μια λίστα με τρέχοντα browser strings:

1import random
2USER_AGENTS = [
3    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
4    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
5    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
6    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7]
8def get_headers():
9    return {
10        "User-Agent": random.choice(USER_AGENTS),
11        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
12        "Accept-Language": "en-US,en;q=0.9",
13        "Accept-Encoding": "gzip, deflate, br",
14        "Referer": "https://www.google.com/",
15        "DNT": "1",
16        "Connection": "keep-alive",
17    }

Μια λεπτομέρεια που συχνά μπερδεύει τον κόσμο: το Accept-Language πρέπει να ταιριάζει με τη γεωγραφική τοποθεσία που υπονοεί το IP σου. Αν στέλνεις Accept-Language: en-US από γερμανικό IP, αυτό είναι κόκκινο καμπανάκι.

TLS fingerprint impersonation με curl_cffi

Το καλύψαμε στο Βήμα 2, αλλά αξίζει να το τονίσουμε: αυτή είναι η τεχνική που δίνει τη μεγαλύτερη βελτίωση στο success rate. Το κλασικό Python requests πετυχαίνει περίπου 2% success απέναντι στην Amazon. Με curl_cffi impersonation, φτάνεις περίπου στο 94%. Αυτή είναι η διαφορά ανάμεσα σε scraper που δουλεύει και scraper που είναι για πέταμα.

1from curl_cffi import requests as cfreq
2# Κάνε rotate και στους στόχους impersonation
3BROWSERS = ["chrome120", "chrome124", "chrome131"]
4response = cfreq.get(
5    url,
6    headers=get_headers(),
7    impersonate=random.choice(BROWSERS),
8)

Εναλλαγή proxies

Για scraping περισσότερων από λίγες σελίδες, θα χρειαστείς proxy rotation. Η Amazon παρακολουθεί τις IP διευθύνσεις και μπλοκάρει κάθε μεμονωμένο IP που στέλνει υπερβολικά πολλά requests.

1PROXIES = [
2    "http://user:pass@proxy1.example.com:8080",
3    "http://user:pass@proxy2.example.com:8080",
4    "http://user:pass@proxy3.example.com:8080",
5]
6proxy = random.choice(PROXIES)
7response = cfreq.get(
8    url,
9    headers=get_headers(),
10    impersonate="chrome124",
11    proxies={"http": proxy, "https": proxy},
12)

Τα residential proxies είναι πιο αποτελεσματικά από τα datacenter proxies (η Amazon μπλοκάρει προληπτικά ranges datacenter IP), αλλά είναι και ακριβότερα. Για ένα μικρό project, μπορείς να ξεκινήσεις με μια και να κλιμακώσεις ανάλογα με τις ανάγκες.

Rate limiting και exponential backoff

Κανένα από τα ανταγωνιστικά άρθρα που βρήκα δεν το καλύπτει αυτό, αλλά είναι απαραίτητο. Όταν λάβεις 503 ή CAPTCHA response, μην ξαναδοκιμάσεις αμέσως — αυτός είναι ο γρήγορος δρόμος για μόνιμο ban.

1import time
2import random
3def fetch_with_backoff(url, max_retries=3):
4    """Ανακτά ένα URL με exponential backoff σε περίπτωση αποτυχίας."""
5    for attempt in range(max_retries):
6        response = cfreq.get(
7            url,
8            headers=get_headers(),
9            impersonate=random.choice(BROWSERS),
10        )
11        if response.status_code == 200:
12            return response
13        # Exponential backoff με jitter
14        wait = min(2 ** attempt + random.uniform(0, 1), 30)
15        print(f"Η προσπάθεια {attempt+1} απέτυχε ({response.status_code}). Αναμονή {wait:.1f}s...")
16        time.sleep(wait)
17    return None  # Εξαντλήθηκαν όλες οι επαναλήψεις

Ο τύπος wait = min(2^attempt + jitter, max_delay) εξασφαλίζει ότι οι καθυστερήσεις αυξάνονται (2s, 4s, 8s...) αλλά δεν ξεπερνούν ποτέ ένα λογικό όριο. Το random jitter αποτρέπει το retry pattern σου από το να αναγνωριστεί ως fingerprint.

Εναλλακτική με Selenium ή Playwright για JS-rendered περιεχόμενο

Ορισμένες σελίδες της Amazon (ιδίως όσες έχουν δυναμικά pricing widgets ή variation selectors) χρειάζονται JavaScript για να αποδοθούν πλήρως. Όταν το curl_cffi επιστρέφει ελλιπές HTML, ένα headless browser είναι η λύση ανάγκης:

1from playwright.sync_api import sync_playwright
2def scrape_with_browser(url):
3    with sync_playwright() as p:
4        browser = p.chromium.launch(headless=True)
5        page = browser.new_page()
6        page.goto(url, wait_until="domcontentloaded")
7        page.wait_for_timeout(3000)  # Δίνει χρόνο να αποδοθεί το JS
8        html = page.content()
9        browser.close()
10        return html

Αυτό είναι πιο αργό — 3–5 δευτερόλεπτα ανά σελίδα αντί για κάτω από 1 δευτερόλεπτο με curl_cffi. Χρησιμοποίησέ το μόνο όταν χρειάζεται.

Από την εμπειρία μου, το curl_cffi καλύπτει πάνω από το 90% των Amazon product pages χωρίς browser.

Σύνοψη Anti-Blocking

ΤεχνικήΔυσκολίαΑποτελεσματικότηταΚαλύπτεται από τα περισσότερα tutorials;
Custom User-AgentΕύκοληΧαμηλή (η Amazon εντοπίζει μοτίβα)Ναι
Εναλλαγή πλήρων headersΕύκοληΜεσαίαΣπάνια
TLS impersonation (curl_cffi)ΜεσαίαΥψηλή (~94% success)Σχεδόν ποτέ
Proxy rotationΜεσαίαΥψηλήΛίγο, αν καλύπτεται
Rate limiting + exponential backoffΕύκοληΜεσαίαΌχι
Fallback σε Selenium/PlaywrightΜεσαίαΥψηλή (για JS περιεχόμενο)Αναφέρεται, δεν παρουσιάζεται

Πέρα από το CSV: Εξαγωγή scraped δεδομένων Amazon σε Google Sheets, Airtable και άλλα

Κάθε tutorial που εξέτασα σταματά στην εξαγωγή σε CSV. Όμως τα πραγματικά business workflows χρειάζονται δεδομένα σε Google Sheets, βάσεις δεδομένων ή εργαλεία όπως το Airtable και το Notion.

Εξαγωγή στο Google Sheets με gspread

Πρώτα, ρύθμισε ένα Google service account (εφάπαξ ρύθμιση):

  1. Πήγαινε στο → APIs & Services → Credentials
  2. Δημιούργησε service account και κατέβασε το JSON key file
  3. Αποθήκευσέ το στο ~/.config/gspread/service_account.json
  4. Κάνε share το spreadsheet-στόχο με το client_email από το JSON αρχείο

Έπειτα:

1import gspread
2from gspread_dataframe import set_with_dataframe
3gc = gspread.service_account()
4sh = gc.open("Amazon Scrape Data")
5worksheet = sh.sheet1
6set_with_dataframe(worksheet, df)
7print("Τα δεδομένα εξήχθησαν στο Google Sheets!")

Αυτό γράφει ολόκληρο το DataFrame απευθείας σε Google Sheet — ζωντανά, shareable και έτοιμο για dashboards.

Αποθήκευση σε SQLite για τοπική ανάλυση

Για μεγαλύτερα datasets ή ιστορική παρακολούθηση, το SQLite είναι ιδανικό — χωρίς στήσιμο server, μόνο ένα αρχείο:

1import sqlite3
2conn = sqlite3.connect("amazon_products.db")
3df.to_sql("products", conn, if_exists="append", index=False)
4print(f"Αποθηκεύτηκαν {len(df)} προϊόντα στο SQLite")
5# Αργότερα, query:
6historical = pd.read_sql_query(
7    "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
8    conn,
9)

Η no-code εναλλακτική

Αν δεν θέλεις να συντηρείς Python export scripts, το προσφέρει δωρεάν εξαγωγή σε Google Sheets, Airtable, Notion, Excel, CSV και JSON — συμπεριλαμβανομένων image fields που αποδίδονται απευθείας σε Airtable και Notion. Καμία ρύθμιση gspread, κανένα API credential, καθόλου κώδικας. Για ομάδες που θέλουν τα δεδομένα να ρέουν στα υπάρχοντα εργαλεία τους, αυτό γλιτώνει πολύ χρόνο.

Προγραμματισμός αυτοματοποιημένων Amazon scrapes — το κεφάλαιο που λείπει

Η παρακολούθηση τιμών και αποθεμάτων απαιτεί επαναλαμβανόμενα scrapes, όχι μεμονωμένα runs. Κι όμως, δεν βρήκα ούτε ένα ανταγωνιστικό άρθρο που να καλύπτει το scheduling. Δες πώς να αυτοματοποιήσεις τον Python scraper σου.

Cron jobs (Linux/macOS)

Άνοιξε το crontab σου:

1crontab -e

Πρόσθεσε μια γραμμή για να τρέχει το scraper κάθε μέρα στις 6 π.μ.:

10 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Ή κάθε 6 ώρες:

10 */6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Windows Task Scheduler

Δημιούργησε ένα batch file run_scraper.bat:

1@echo off
2cd /d "C:\path\to\amazon-scraper"
3call venv\Scripts\activate
4python scraper.py
5deactivate

Έπειτα άνοιξε το Task Scheduler → Create Basic Task → όρισε trigger (Daily, Hourly) → Action: "Start a program" → επίλεξε το run_scraper.bat.

GitHub Actions (Free Tier)

Για cloud-based scheduling χωρίς υποδομή:

1name: Amazon Scraper
2on:
3  schedule:
4    - cron: "0 6 * * *"  # Καθημερινά στις 6 π.μ. UTC
5  workflow_dispatch:       # Χειροκίνητη εκκίνηση
6jobs:
7  scrape:
8    runs-on: ubuntu-latest
9    steps:
10      - uses: actions/checkout@v3
11      - name: Set up Python
12        uses: actions/setup-python@v4
13        with:
14          python-version: "3.11"
15      - name: Install dependencies
16        run: pip install -r requirements.txt
17      - name: Run scraper
18        run: python scraper.py
19      - name: Commit results
20        run: |
21          git config user.name 'GitHub Actions'
22          git config user.email 'actions@github.com'
23          git add data/
24          git diff --staged --quiet || git commit -m "Update scraped data"
25          git push

Αποθήκευσε proxy credentials στα GitHub Secrets και έχεις ένα δωρεάν, αυτοματοποιημένο scraping pipeline.

No-code εναλλακτική: το Scheduled Scraper του Thunderbit

Για ομάδες που δεν θέλουν να διαχειρίζονται cron syntax ή cloud infrastructure, το Thunderbit προσφέρει ενσωματωμένο . Περιγράφεις το πρόγραμμα με απλά λόγια (π.χ. "κάθε μέρα στις 8 π.μ." ή "κάθε Δευτέρα"), προσθέτεις τα Amazon URLs σου και πατάς "Schedule". Ούτε terminal, ούτε YAML files, ούτε deployment pipeline. Είναι ιδιαίτερα χρήσιμο για ecommerce ομάδες που κάνουν συνεχή παρακολούθηση τιμών ή αποθεμάτων.

Python DIY vs. Scraper API vs. No-Code: Ποια προσέγγιση να επιλέξεις;

Αυτή είναι μια ερώτηση που βλέπω συνεχώς σε forums, και κανένα άρθρο που βγαίνει ψηλά στα αποτελέσματα δεν δίνει οργανωμένη απάντηση. Οπότε να η ειλικρινής μου άποψη:

ΚριτήριοPython + BS4/curl_cffiScraper API (ScraperAPI, Oxylabs)No-Code (Thunderbit)
Χρόνος ρύθμισης30–60 min10–20 min~2 λεπτά
Απαιτείται κώδικαςΝαι (Python)Ναι (API calls)Όχι
Ενσωματωμένη αποφυγή αποκλεισμούΌχι (DIY)ΝαιΝαι
Υποστηρίζει JS renderingΜόνο με Selenium/PlaywrightΔιαφέρει ανά πάροχοΝαι (Browser ή Cloud mode)
ΠρογραμματισμόςDIY (cron/cloud)Κάποια το προσφέρουνΕνσωματωμένο
ΚόστοςΔωρεάν (+ κόστος proxies)$30–100+/μήναΥπάρχει δωρεάν tier
ΣυντήρησηΥψηλή (σπάνε selectors)ΧαμηλήΚαμία (η AI προσαρμόζεται)
Καλύτερο γιαDevelopers που θέλουν πλήρη έλεγχοΚλίμακα & αξιοπιστία σε μεγάλο όγκοΤαχύτητα, μη-προγραμματιστές, business users

Η Python είναι η σωστή επιλογή αν θέλεις να μάθεις, να προσαρμόσεις κάθε λεπτομέρεια και δεν σε πειράζει η συνεχής συντήρηση. Τα Scraper APIs χειρίζονται για σένα το anti-blocking, αλλά εξακολουθούν να απαιτούν κώδικα. Και το Thunderbit είναι η πιο γρήγορη λύση για sales, ecommerce ops ή οποιονδήποτε απλώς χρειάζεται τα δεδομένα — χωρίς selectors, χωρίς κώδικα, χωρίς συντήρηση όταν η Amazon αλλάζει το HTML της.

Πώς το Thunderbit κάνει Scrape προϊόντων Amazon σε 2 κλικ

Είμαι φυσικά προκατειλημμένος — η ομάδα μου το έφτιαξε. Αλλά η ροή δουλειάς είναι πραγματικά τόσο απλή:

  1. Εγκατάστησε το
  2. Πήγαινε σε μια σελίδα αποτελεσμάτων αναζήτησης ή προϊόντος της Amazon
  3. Πάτα "AI Suggest Fields" (ή χρησιμοποίησε το instant Amazon scraper template)
  4. Πάτα "Scrape"

Η AI του Thunderbit διαβάζει τη σελίδα, εντοπίζει τη δομή των δεδομένων και εξάγει τα πάντα σε καθαρό πίνακα. Μπορείς να κάνεις export σε Excel, Google Sheets, Airtable ή Notion δωρεάν. Το πραγματικό πλεονέκτημα: όταν η Amazon αλλάξει το HTML της την επόμενη εβδομάδα (και θα το κάνει), η AI του Thunderbit προσαρμόζεται αυτόματα. Χωρίς σπασμένα scripts, χωρίς ενημερώσεις selectors.

Για εμπλουτισμό λιστών προϊόντων με δεδομένα από detail pages, η λειτουργία Subpage Scraping του Thunderbit ακολουθεί αυτόματα links προς τις σελίδες προϊόντων και αντλεί επιπλέον πεδία όπως εικόνες, περιγραφές και παραλλαγές — κάτι που στην Python θέλει πολύ παραπάνω κώδικα.

Συμβουλές για να κρατήσεις τον Python Amazon scraper σου να δουλεύει μακροπρόθεσμα

Αν ακολουθήσεις την Python διαδρομή, δες πώς να μειώσεις τα προβλήματα συντήρησης:

  • Έλεγχε τα selectors τακτικά. Η Amazon τα αλλάζει συχνά. Κράτα σελιδοδείκτη αυτό το άρθρο — θα ενημερώνω τον πίνακα selectors όσο αλλάζουν τα πράγματα.
  • Παρακολούθησε το success rate σου. Κατέγραψε τον λόγο των 200 responses προς τα 503/CAPTCHAs. Βάλε alert (ακόμη και απλό email) όταν το success rate πέσει κάτω από 80%.
  • Αποθήκευε το raw HTML. Φύλαξε ολόκληρο το HTML response μαζί με τα parsed δεδομένα. Αν αλλάξουν οι selectors, μπορείς να κάνεις re-parse ιστορικά δεδομένα χωρίς νέο scraping.
  • Κάνε συχνή εναλλαγή proxies και User-Agents. Τα στατικά fingerprints εντοπίζονται μέσα σε ώρες σε μεγάλη κλίμακα.
  • Χρησιμοποίησε exponential backoff. Μην ξαναδοκιμάζεις αμέσως μετά από block.
  • Βάλε το scraper σε Docker. Πέρασέ τον σε Docker container για εύκολη ανάπτυξη και portability.
  • Πρόσθεσε data validation. Έλεγξε ότι οι τιμές είναι αριθμητικές, οι αξιολογήσεις είναι μεταξύ 1–5 και οι τίτλοι δεν είναι κενές τιμές. Μια ομάδα ανέφερε μετά την προσθήκη layers επικύρωσης.

Ή, αν όλα αυτά ακούγονται σαν περισσότερη δουλειά απ’ όση ήθελες να αναλάβεις, σκέψου μήπως ένα no-code εργαλείο όπως το Thunderbit ταιριάζει καλύτερα στη χρήση σου. Δεν υπάρχει ντροπή στο να διαλέξεις τον πιο γρήγορο δρόμο — έχω περάσει αρκετά χρόνια διορθώνοντας scrapers για να ξέρω ότι μερικές φορές ο καλύτερος κώδικας είναι αυτός που δεν χρειάζεται να γράψεις.

Νομικές και ηθικές παράμετροι στο scraping της Amazon

Επειδή αυτό το θέμα εμφανίζεται σε κάθε συζήτηση για Amazon scraping, μια σύντομη σημείωση για το νομικό πλαίσιο:

  • Η εξαγωγή δημόσια διαθέσιμων δεδομένων είναι γενικά νόμιμη στις ΗΠΑ. Η ιστορική απόφαση (2022) έκρινε ότι η πρόσβαση σε δημόσια δεδομένα δεν παραβιάζει τον CFAA. Πιο πρόσφατα, οι υποθέσεις (2024) και (2024) ενίσχυσαν αυτή την αρχή.
  • Οι Όροι Χρήσης της Amazon απαγορεύουν την αυτοματοποιημένη πρόσβαση. Αυτό είναι αστικό ζήτημα (παραβίαση σύμβασης), όχι ποινικό. Τα δικαστήρια συνήθως τα ξεχωρίζουν.
  • Η υπόθεση Amazon v. Perplexity (2025) είναι ενεργή υπόθεση που αφορά AI scraping σελίδων της Amazon. Εκδόθηκε προσωρινή διαταγή τον Μάρτιο του 2026. Αξίζει να την παρακολουθείς.
  • Μείνε σε δημόσιες σελίδες. Μην κάνεις scrape περιεχομένου που προστατεύεται με login, προσωπικών δεδομένων ή οτιδήποτε απαιτεί authentication.
  • Σεβάσου τα rate limits. Μην υπερφορτώνεις τους servers της Amazon. Καθυστέρηση 2–5 δευτερολέπτων μεταξύ requests είναι λογική.
  • Χρησιμοποίησε υπεύθυνα τα δεδομένα. Κάνε scrape για ανάλυση, όχι για αναδημοσίευση προστατευμένου περιεχομένου.
  • Συμβουλέψου νομικό σύμβουλο για μεγάλης κλίμακας εμπορική χρήση, ειδικά αν βρίσκεσαι στην ΕΕ (ισχύει ο GDPR για προσωπικά δεδομένα).

Για πιο αναλυτική ματιά, δες τον οδηγό μας για τις .

Κλείνοντας

Τώρα έχεις έναν λειτουργικό Python Amazon scraper με επαληθευμένους 2025 selectors, μια πολυεπίπεδη στρατηγική anti-blocking που πάει πολύ πέρα από το απλό "βάλε ένα User-Agent", πρακτικές επιλογές scheduling για συνεχή παρακολούθηση και μεθόδους εξαγωγής που βάζουν τα δεδομένα σου σε Google Sheets, βάσεις δεδομένων ή οποιοδήποτε εργαλείο χρησιμοποιεί η ομάδα σου.

Γρήγορη σύνοψη:

  • Python + curl_cffi + BeautifulSoup σου δίνει πλήρη έλεγχο και περίπου 94% success rate όταν συνδυάζεται με TLS impersonation
  • Το anti-blocking θέλει πολλά επίπεδα: εναλλαγή headers, TLS impersonation, proxy rotation, rate limiting και exponential backoff
  • Το scheduling μετατρέπει ένα one-off script σε pipeline συνεχούς παρακολούθησης (cron, GitHub Actions ή το ενσωματωμένο scheduler του Thunderbit)
  • Η εξαγωγή πέρα από CSV — Google Sheets, SQLite, Airtable, Notion — είναι εκεί όπου βρίσκεται η πραγματική επιχειρηματική αξία
  • Το Thunderbit δίνει μια εναλλακτική δύο κλικ για μη-προγραμματιστές ή για όσους προτιμούν να αφιερώνουν τον χρόνο τους στην ανάλυση δεδομένων αντί στο debugging selectors

Αν θέλεις να δοκιμάσεις τον κώδικα, όλα όσα περιλαμβάνονται σε αυτόν τον οδηγό είναι έτοιμα για copy-paste και εκτέλεση. Και αν προτιμάς να παραλείψεις εντελώς τον προγραμματισμό, το σου επιτρέπει να δοκιμάσεις αμέσως τη no-code προσέγγιση στην Amazon.

Για περισσότερα, δες τους οδηγούς μας για , και . Μπορείς επίσης να παρακολουθήσεις αναλυτικές παρουσιάσεις βήμα προς βήμα στο .

Καλή επιτυχία στο scraping — και μακάρι οι selectors σου να αντέξουν μέχρι την επόμενη ενημέρωση της Amazon.

Συχνές ερωτήσεις

1. Γιατί ο Python Amazon scraper μου μπλοκάρεται μετά από λίγα requests;

Η Amazon χρησιμοποιεί σύστημα άμυνας έξι επιπέδων: ανάλυση φήμης IP, TLS fingerprinting (JA3/JA4), ανίχνευση περιβάλλοντος browser, behavioral biometrics, CAPTCHA challenges και anomaly detection με ML. Ένα βασικό requests script με μόνο ένα User-Agent header πετυχαίνει μόλις περίπου success. Χρειάζεσαι TLS impersonation (curl_cffi), πλήρη εναλλαγή headers, proxy rotation και rate limiting με τυχαίο jitter για αξιόπιστη πρόσβαση.

2. Ποιες Python βιβλιοθήκες είναι οι καλύτερες για scraping προϊόντων Amazon το 2025;

curl_cffi για HTTP requests με TLS impersonation (η μεγαλύτερη μεμονωμένη βελτίωση), BeautifulSoup4 με lxml για parsing HTML, pandas για δόμηση και εξαγωγή δεδομένων και Selenium ή Playwright ως εναλλακτική για περιεχόμενο που αποδίδεται με JavaScript. Η Python χρησιμοποιείται από το των scraping developers.

3. Είναι νόμιμο να κάνω scrape δεδομένα προϊόντων Amazon;

Η εξαγωγή δημόσια διαθέσιμων δεδομένων είναι γενικά νόμιμη στις ΗΠΑ, όπως υποστηρίζεται από αποφάσεις όπως οι hiQ v. LinkedIn και Meta v. Bright Data. Οι Όροι Χρήσης της Amazon απαγορεύουν την αυτοματοποιημένη πρόσβαση, αλλά τα δικαστήρια ξεχωρίζουν τις παραβιάσεις ToS (αστικές) από τις ποινικές παραβιάσεις. Να αποφεύγεις πάντα περιεχόμενο πίσω από login, να σέβεσαι τα rate limits και να συμβουλεύεσαι νομικό σύμβουλο για μεγάλης κλίμακας εμπορική χρήση.

4. Μπορώ να κάνω scrape στην Amazon χωρίς να γράψω καθόλου κώδικα;

Ναι. Εργαλεία όπως το σού επιτρέπουν να κάνεις scrape προϊόντων Amazon σε 2 κλικ με ένα Chrome extension. Η AI-powered ανίχνευση πεδίων δομεί αυτόματα τα δεδομένα και μπορείς να κάνεις export σε Excel, Google Sheets, Airtable ή Notion δωρεάν. Όταν η Amazon αλλάζει το HTML της, η AI του Thunderbit προσαρμόζεται χωρίς χειροκίνητες ενημερώσεις.

5. Πόσο συχνά αλλάζει η Amazon τα HTML selectors της και πώς κρατάω τον scraper μου ενημερωμένο;

Συχνά και χωρίς προειδοποίηση. Η κοινότητα του scraping αναφέρει ότι των crawlers χρειάζονται εβδομαδιαίες διορθώσεις λόγω αλλαγών στο DOM. Για να μένεις μπροστά, παρακολούθησε το success rate του scraper σου, αποθήκευσε raw HTML για επανα-parse και έλεγχε τα selectors σε live σελίδες τακτικά. Εναλλακτικά, AI-powered εργαλεία όπως το Thunderbit προσαρμόζονται αυτόματα, εξαλείφοντας αυτό το βάρος συντήρησης.

Μάθε περισσότερα

Πίνακας περιεχομένων

Δοκίμασε το Thunderbit

Εξήγαγε leads και άλλα δεδομένα σε μόλις 2 κλικ. Με AI.

Απόκτησε το Thunderbit Είναι δωρεάν
Εξήγαγε δεδομένα με AI
Μετέφερε εύκολα δεδομένα σε Google Sheets, Airtable ή Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week