Dacă ai urmărit vreun tutorial despre extrage produse amazon cu python doar ca să te lovești de un zid de CAPTCHA-uri, erori 503 sau rezultate complet goale — bine ai venit în club. Majoritatea ghidurilor Python despre Amazon care circulă pe internet au fost scrise în 2022 sau 2023 și folosesc selectori și tehnici pe care Amazon le-a reparat de mult.
Am petrecut ani construind instrumente de extragere a datelor la Thunderbit și pot spune un lucru direct: Amazon este unul dintre cele mai dificile site-uri de extras în mod fiabil. Platforma își schimbă constant structura HTML, aplică o apărare anti-bot pe șase niveluri și chiar afișează layout-uri diferite unor utilizatori diferiți prin testare A/B. În acest ghid, te voi ghida pas cu pas printr-un scraper Python pentru Amazon care chiar funcționează în 2025 — cu selectori CSS verificați, o strategie stratificată anti-blocare și recomandări de programare și export pe care majoritatea tutorialelor le omit complet. Iar pentru cei care au nevoie doar de date, fără să se lupte cu Python, îți voi arăta și cum poate face aceeași treabă în doar două clickuri.
Ce înseamnă extragerea produselor Amazon?
Extragerea produselor Amazon este procesul de a prelua automat date disponibile public — nume de produse, prețuri, evaluări, număr de recenzii, imagini, disponibilitate și multe altele — din paginile de produse și din rezultatele căutării de pe Amazon. În loc să copiezi manual informații din sute de listări, un scraper vizitează fiecare pagină, citește HTML-ul și extrage datele specificate într-un format structurat, precum CSV, Excel sau o bază de date.
Gândește-te la el ca la un intern neobosit, care poate vizita o mie de pagini de produse în timpul în care tu îți termini cafeaua de dimineață. Doar că internul ăsta nu greșește nimic și nu are nevoie de pauză de prânz.
De ce să extragi produse Amazon cu Python?
Amazon găzduiește aproximativ în peste 30 de categorii, susținute de aproximativ . Vânzătorii terți reprezintă acum 69% din GMV-ul total. Monitorizarea manuală chiar și a unei fracțiuni din acest catalog este imposibilă. Iată de ce echipele extrag date din Amazon:
| Caz de utilizare | Cine beneficiază | Ce extrag |
|---|---|---|
| Monitorizarea prețurilor și repricing | Operațiuni ecommerce, vânzători marketplace | Prețuri, disponibilitate, informații despre vânzător |
| Analiza concurenței | Product managers, echipe de brand | Caracteristici produs, evaluări, număr de recenzii |
| Cercetare de piață | Analiști, echipe de produse noi | Tendințe pe categorie, distribuții de preț |
| Generare de lead-uri | Echipe de vânzări | Nume de vânzători, informații despre brand, date de contact |
| Affiliate marketing | Creatori de conținut, site-uri de oferte | Prețuri, promoții, detalii despre produse |
| Urmărirea stocurilor | Supply chain, achiziții | Status stoc, estimări de livrare |
Doar amploarea schimbărilor de preț de pe Amazon face automatizarea esențială: Amazon modifică prețurile de , iar prețul mediu al unui produs se actualizează aproximativ la fiecare 10 minute. Prin comparație, competitori precum Best Buy și Walmart își schimbă prețurile doar de aproximativ 50.000 de ori pe lună. Nicio echipă umană nu poate ține pasul.

Python îți oferă control total asupra procesului de extragere — tu decizi ce date colectezi, cum tratezi erorile și unde stochezi informațiile. Dar asta înseamnă și că tu ești responsabil de mentenanță, anti-blocare și de adaptarea la schimbările frecvente ale HTML-ului Amazon.
Ce poți extrage din Amazon și ce nu poți
Din paginile de produse accesibile public, poți extrage de obicei:
- Titlul produsului (nume, brand)
- Prețul (curent, inițial, preț promoțional)
- Evaluarea (media stelelor)
- Numărul de recenzii
- Imagini ale produsului (URL-ul imaginii principale)
- Disponibilitate / status stoc
- ASIN (Amazon Standard Identification Number)
- Descrierea produsului și punctele-cheie
- Informații despre vânzător
- Variante de produs (mărime, culoare etc.)
Ce ar trebui să eviți:
- Date din spatele autentificării: pagini extinse de recenzii, date din cont personal, istoricul comenzilor
- Informații personale: nume de cumpărători, adrese, date de plată
- Conținut protejat prin drepturi de autor pentru republicare: descrierile și imaginile produselor sunt ok pentru analiză, dar nu le republica drept ale tale
Fișierul al Amazon blochează peste 50 de boți nominalizați (inclusiv GPTBot, Scrapy și ClaudeBot) și interzice zone precum conturile de utilizator, coșurile și wishlist-urile. Paginile de detalii ale produselor nu sunt blocate explicit, dar Termenii și condițiile Amazon interzic accesul automatizat. Instanțele au făcut, în general, distincția între încălcările ToS (o chestiune civilă) și încălcările penale sub CFAA — mai multe despre legalitate la finalul ghidului.
Unelte și biblioteci de care ai nevoie
Iată stack-ul Python pentru acest tutorial:
| Bibliotecă | Scop | De ce o folosim |
|---|---|---|
requests | Cereri HTTP | Simplu, bine suportat |
beautifulsoup4 | Parsare HTML | Extragere ușoară pe baza selectorilor CSS |
lxml | Parser HTML rapid | Folosit ca backend de parsare pentru BeautifulSoup |
curl_cffi | Impersonare TLS fingerprint | Esențial pentru a evita detectarea Amazon |
pandas | Structurare și export date | DataFrame-uri, export CSV/Excel |
Opțional (pentru conținut randat în JavaScript):
seleniumsauplaywright— automatizare cu browser headless
Configurarea mediului Python
Deschide terminalul și rulează:
1mkdir amazon-scraper && cd amazon-scraper
2python -m venv venv
3source venv/bin/activate # Pe Windows: venv\Scripts\activate
4pip install requests beautifulsoup4 lxml curl_cffi pandas
Verifică dacă totul s-a instalat corect:
1import requests, bs4, curl_cffi, pandas
2print("Totul e în regulă!")
Dacă vezi „Totul e în regulă!” fără erori, ești gata de lucru.

De ce se strică majoritatea tutorialelor Amazon și de ce acesta e diferit
Aceasta este partea pe care cele mai multe ghiduri o sar, și probabil motivul pentru care citești articolul acum.
Amazon își actualizează frecvent structura HTML, numele claselor și ID-urile elementelor. Comunitatea de scraping raportează că din cauza schimbărilor de DOM și a fingerprinting-ului. Cel mai celebru exemplu? Selectorul #priceblock_ourprice, prezent în sute de tutoriale din 2018–2023. Acest ID nu mai există pe paginile de produs Amazon.
O comparație rapidă între ce este stricat și ce funcționează acum:
| Punct de date | Selector defect (înainte de 2024) | Selector funcțional 2025 |
|---|---|---|
| Preț | #priceblock_ourprice | div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen |
| Titlu | #productTitle | span#productTitle (încă funcționează) |
| Evaluare | span.a-icon-alt (uneori în context greșit) | #acrPopover span.a-icon-alt |
| Număr recenzii | #acrCustomerReviewCount | span#acrCustomerReviewText |
| Disponibilitate | #availability span | div#availability span.a-size-medium |
Fiecare fragment de cod din acest ghid a fost testat pe pagini Amazon live în 2025. Îți voi arăta selectorii CSS reali împreună cu rezultatul așteptat — fără copy-paste din 2022.
Înainte să începi
- Nivel: Intermediar (presupune cunoștințe de bază de Python)
- Timp necesar: ~30–45 de minute pentru tutorialul complet; ~10 minute pentru scraperul de bază
- De ce ai nevoie: Python 3.9+, browser Chrome (pentru inspectarea paginilor Amazon), un terminal și opțional dacă vrei să compari varianta fără cod
Pasul 1: Trimite prima cerere către Amazon
Accesează orice pagină de produs Amazon în browser și copiază URL-ul. Vom începe cu un requests.get() simplu:
1import requests
2url = "https://www.amazon.com/dp/B0DGNFM9YJ"
3response = requests.get(url)
4print(response.status_code)
5print(response.text[:500])
Rulează codul și vei primi aproape sigur un cod de stare 503 sau o pagină care spune „To discuss automated access to Amazon data please contact…”. Acesta este WAF-ul Amazon (Web Application Firewall) care îți detectează scriptul Python. Un simplu requests.get() fără header-ele potrivite are aproximativ o împotriva Amazon.
Ar trebui să vezi ceva de genul: 503 și o pagină de blocare în HTML. E de așteptat — o vom rezolva în pasul următor.
Pasul 2: Configurează headere personalizate și impersonarea TLS
Simpla adăugare a unui header User-Agent nu mai este suficientă. Amazon compară header-ele HTTP cu fingerprint-ul TLS. Dacă pretinzi că ești Chrome 120, dar handshake-ul TLS dezvăluie biblioteca Python requests, vei fi .
Cea mai fiabilă abordare în 2025 este să folosești curl_cffi cu impersonare de browser:
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))
Cu curl_cffi impersonând Chrome 124, rata de succes urcă la aproximativ — de 47 de ori mai bine decât requests simplu. Ar trebui acum să vezi un cod de stare 200 și un răspuns HTML mult mai lung (peste 100.000 de caractere).
Dacă tot primești 503, încearcă altă valoare pentru impersonate (de exemplu, "chrome131") sau adaugă o scurtă pauză înainte de a încerca din nou.
Pasul 3: Parcurge HTML-ul și extrage datele produsului
Acum că avem HTML-ul complet, să extragem datele folosind BeautifulSoup și selectorii verificați pentru 2025:
1from bs4 import BeautifulSoup
2soup = BeautifulSoup(response.text, "lxml")
3# Titlul produsului
4title_el = soup.select_one("span#productTitle")
5title = title_el.get_text(strip=True) if title_el else None
6# Prețul
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# Evaluarea
16rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17rating = rating_el.get_text(strip=True) if rating_el else None
18# Numărul de recenzii
19reviews_el = soup.select_one("span#acrCustomerReviewText")
20reviews = reviews_el.get_text(strip=True) if reviews_el else None
21# Disponibilitatea
22avail_el = soup.select_one("div#availability span")
23availability = avail_el.get_text(strip=True) if avail_el else None
24# URL-ul imaginii principale
25img_el = soup.select_one("#landingImage")
26image_url = img_el.get("src") if img_el else None
27print(f"Titlu: {title}")
28print(f"Preț: {price}")
29print(f"Evaluare: {rating}")
30print(f"Recenzii: {reviews}")
31print(f"Disponibilitate: {availability}")
32print(f"Imagine: {image_url}")
Exemplu de output așteptat:
1Titlu: Apple AirPods Pro (a 2-a generație) cu USB-C
2Preț: $189.99
3Evaluare: 4.7 din 5 stele
4Recenzii: 98,432 evaluări
5Disponibilitate: În stoc
6Imagine: https://m.media-amazon.com/images/I/61SUj2...
Observă selectorii de rezervă multipli pentru preț — Amazon folosește containere diferite în funcție de tipul produsului, statusul promoției și varianta testată A/B. Încadrarea fiecărei extrageri într-o verificare condițională împiedică blocarea scraperului când un selector nu se potrivește.
Pasul 4: Extrage mai multe produse din rezultatele căutării
Ca să construiești un set de date real, vei dori să pornești de la o pagină de rezultate Amazon, să colectezi ASIN-uri și apoi să extragi fiecare pagină de produs.
1import time
2import random
3def get_search_asins(keyword, max_pages=1):
4 """Colectează ASIN-uri din rezultatele căutării 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"Pagina de căutare {page} a returnat {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"Pagina {page}: s-au găsit {len(results)} produse")
19 time.sleep(random.uniform(2, 5)) # Pauză politicoasă
20 return asins
21asins = get_search_asins("wireless+earbuds", max_pages=2)
22print(f"Au fost colectate {len(asins)} ASIN-uri")
Fiecare ASIN corespunde unei URL curate de produs: https://www.amazon.com/dp/{ASIN}. Aceasta este o abordare mai fiabilă decât URL-urile complete din rezultatele căutării, care pot conține parametri specifici sesiunii.
Pasul 5: Gestionează paginarea și extrage la scară
Acum să combinăm colectarea din căutare și extragerea din paginile de produs într-un flux complet:
1import pandas as pd
2def scrape_product(asin):
3 """Extrage o singură pagină de produs 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"Eroare la extragerea {asin}: {e}")
32 return None
33# Extrage toate ASIN-urile colectate
34products = []
35for i, asin in enumerate(asins):
36 print(f"Se extrage {i+1}/{len(asins)}: {asin}")
37 product = scrape_product(asin)
38 if product:
39 products.append(product)
40 time.sleep(random.uniform(2, 5)) # Întârziere aleatorie între cereri
41df = pd.DataFrame(products)
42print(f"\nAu fost extrase cu succes {len(df)} produse")
43print(df.head())
Întârzierea aleatorie de 2–5 secunde este esențială. Un timp perfect regulat (de exemplu, exact 3 secunde de fiecare dată) pare suspect pentru analiza comportamentală a Amazon. Intervalele aleatorii imită un model de navigare uman.
Pasul 6: Salvează datele Amazon extrase în CSV
1df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
2print("Salvat în amazon_products.csv")
Ar trebui acum să ai un CSV curat cu coloane pentru ASIN, titlu, preț, evaluare, recenzii, disponibilitate, URL imagine și URL produs. Aici se opresc majoritatea tutorialelor — dar dacă construiești un flux real, CSV-ul e doar începutul.
Detaliu anti-blocare: cum să ții scraperul în funcțiune
Blocarea este pentru oricine încearcă să extragă produse Amazon cu Python. Apărarea în șase straturi a Amazon include analiza reputației IP-ului, TLS fingerprinting, verificări ale mediului de browser, biometrie comportamentală, CAPTCHA-uri și detectare de anomalii bazată pe ML. Mai jos este o strategie stratificată pentru fiecare dintre acestea.
Rotește User-Agent-urile și headerele complete
Un singur User-Agent static este detectat rapid. Rotește o listă de stringuri de browser actuale:
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 }
Un detaliu care îi încurcă pe mulți: Accept-Language trebuie să se potrivească cu locația geografică sugerată de IP-ul tău. Trimiterea Accept-Language: en-US de pe un IP german este un semnal de alarmă.
Impersonare TLS cu curl_cffi
Am acoperit asta în Pasul 2, dar merită subliniat: această tehnică oferă cel mai mare salt în rata de succes. requests standard din Python obține aproximativ 2% succes pe Amazon. Cu impersonarea prin curl_cffi, ajungi la circa 94%. Diferența dintre un scraper care funcționează și unul care e defect.
1from curl_cffi import requests as cfreq
2# Rotește și țintele de impersonare
3BROWSERS = ["chrome120", "chrome124", "chrome131"]
4response = cfreq.get(
5 url,
6 headers=get_headers(),
7 impersonate=random.choice(BROWSERS),
8)
Rotirea proxy-urilor
Pentru extragerea a mai mult de câteva pagini, vei avea nevoie de rotirea proxy-urilor. Amazon urmărește adresele IP și va bloca orice IP care trimite prea multe cereri.
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)
Proxy-urile rezidențiale sunt mai eficiente decât cele de datacenter (Amazon blochează proactiv intervalele IP de datacenter), dar sunt și mai scumpe. Pentru un proiect mic, poți începe cu un și să scalezi pe măsură ce ai nevoie.
Limitarea ratei și exponential backoff
Niciun articol al competitorilor pe care l-am găsit nu acoperă asta, dar este esențial. Când primești un 503 sau un răspuns CAPTCHA, nu încerca imediat din nou — e o cale rapidă către un ban permanent.
1import time
2import random
3def fetch_with_backoff(url, max_retries=3):
4 """Preia un URL cu exponential backoff la eșec."""
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 cu jitter
14 wait = min(2 ** attempt + random.uniform(0, 1), 30)
15 print(f"Încercarea {attempt+1} a eșuat ({response.status_code}). Aștept {wait:.1f}s...")
16 time.sleep(wait)
17 return None # Toate reîncercările au fost epuizate
Formula wait = min(2^attempt + jitter, max_delay) face ca întârzierile să crească (2s, 4s, 8s...) fără să depășească o limită rezonabilă. Jitter-ul aleatoriu împiedică modelul de reîncercare să fie identificat prin fingerprint.
Fallback cu Selenium sau Playwright pentru conținut randat în JS
Unele pagini Amazon (mai ales cele cu widget-uri dinamice de preț sau selectoare de variante) au nevoie de JavaScript pentru a se încărca complet. Când curl_cffi returnează HTML incomplet, un browser headless devine varianta de rezervă:
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) # Lasă JS-ul să randzeze
8 html = page.content()
9 browser.close()
10 return html
Este mai lent — 3–5 secunde pe pagină față de sub 1 secundă cu curl_cffi. Folosește-l doar când e nevoie.
Din experiența mea, curl_cffi gestionează peste 90% dintre paginile de produs Amazon fără browser.
Rezumat anti-blocare
| Tehnică | Dificultate | Eficiență | Inclusă în majoritatea tutorialelor? |
|---|---|---|---|
| User-Agent personalizat | Ușor | Scăzută (Amazon detectează tiparele) | Da |
| Rotire completă de headere | Ușor | Medie | Rar |
| Impersonare TLS (curl_cffi) | Mediu | Ridicată (~94% succes) | Aproape niciodată |
| Rotire proxy | Mediu | Ridicată | Pe scurt, dacă apare |
| Limitare rată + exponential backoff | Ușor | Medie | Nu |
| Fallback Selenium/Playwright | Mediu | Ridicată (pentru conținut JS) | Menționat, nu demonstrat |
Dincolo de CSV: exportă datele Amazon în Google Sheets, Airtable și altele
Fiecare tutorial pe care l-am analizat se oprește la exportul în CSV. Dar fluxurile reale de business au nevoie de date în Google Sheets, baze de date sau instrumente precum Airtable și Notion.
Export în Google Sheets cu gspread
Mai întâi, configurează un Google service account (setare unică):
- Mergi în → APIs & Services → Credentials
- Creează un service account și descarcă fișierul JSON cu cheia
- Salvează-l la
~/.config/gspread/service_account.json - Partajează foaia de calcul țintă cu
client_emaildin fișierul JSON
Apoi:
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("Date exportate în Google Sheets!")
Asta scrie întregul DataFrame direct într-un Google Sheet — live, partajabil și gata pentru dashboard-uri.
Stocare în SQLite pentru analiză locală
Pentru seturi mai mari de date sau urmărire istorică, SQLite este perfect — fără configurare de server, doar un singur fișier:
1import sqlite3
2conn = sqlite3.connect("amazon_products.db")
3df.to_sql("products", conn, if_exists="append", index=False)
4print(f"Au fost stocate {len(df)} produse în SQLite")
5# Interogare ulterioară:
6historical = pd.read_sql_query(
7 "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
8 conn,
9)
Alternativa fără cod
Dacă nu vrei să întreții scripturi Python pentru export, oferă export gratuit în Google Sheets, Airtable, Notion, Excel, CSV și JSON — inclusiv câmpuri de imagine care se afișează direct în Airtable și Notion. Fără configurare gspread, fără credențiale API, fără cod. Pentru echipele care vor date în instrumentele deja folosite, economisește mult timp.
Programarea extragerilor automate Amazon — capitolul lipsă
Monitorizarea prețurilor și urmărirea stocurilor cer extrageri recurente, nu rulări o singură dată. Și totuși, nu am găsit niciun articol concurent care să acopere programarea. Iată cum îți automatizezi scraperul Python.
Cron Jobs (Linux/macOS)
Deschide crontab-ul:
1crontab -e
Adaugă o linie pentru a rula scraperul zilnic la 6 dimineața:
10 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1
Sau o dată la 6 ore:
10 */6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1
Windows Task Scheduler
Creează un fișier batch run_scraper.bat:
1@echo off
2cd /d "C:\path\to\amazon-scraper"
3call venv\Scripts\activate
4python scraper.py
5deactivate
Apoi deschide Task Scheduler → Create Basic Task → setează triggerul (Daily, Hourly) → Action: „Start a program” → selectează run_scraper.bat.
GitHub Actions (plan gratuit)
Pentru un program bazat pe cloud, fără infrastructură:
1name: Amazon Scraper
2on:
3 schedule:
4 - cron: "0 6 * * *" # Zilnic la 6 AM UTC
5 workflow_dispatch: # Pornire manuală
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 "Actualizează datele extrase"
25 git push
Stochează credențialele proxy în GitHub Secrets și ai un pipeline de scraping gratuit și automat.
Alternativa fără cod: Scheduled Scraper de la Thunderbit
Pentru echipele care nu vor să gestioneze sintaxa cron sau infrastructura cloud, Thunderbit oferă un integrat. Descrii programul în limbaj natural (de exemplu, „în fiecare zi la 8 AM” sau „în fiecare luni”), adaugi URL-urile Amazon și dai click pe „Schedule”. Fără terminal, fără fișiere YAML, fără pipeline de deploy. Este deosebit de util pentru echipele ecommerce care urmăresc continuu prețurile sau stocurile.
Python DIY vs. Scraper API vs. fără cod: ce abordare ar trebui să alegi?
Este o întrebare pe care o văd constant pe forumuri, iar niciun articol de top nu oferă un răspuns structurat. Așa că iată opinia mea sinceră:
| Criteriu | Python + BS4/curl_cffi | Scraper API (ScraperAPI, Oxylabs) | Fără cod (Thunderbit) |
|---|---|---|---|
| Timp de configurare | 30–60 min | 10–20 min | ~2 minute |
| Este nevoie de cod | Da (Python) | Da (apeluri API) | Nu |
| Anti-blocare inclusă | Nu (DIY) | Da | Da |
| Gestionează randarea JS | Doar cu Selenium/Playwright | Depinde de furnizor | Da (Browser sau Cloud mode) |
| Programare | DIY (cron/cloud) | Unele oferă | Integrată |
| Cost | Gratuit (+ costuri proxy) | 30–100+ USD/lună | Disponibil plan gratuit |
| Mentenanță | Ridicată (se strică selectorii) | Scăzută | Niciuna (AI se adaptează) |
| Cel mai bun pentru | Dezvoltatori care vor control total | Scalare și fiabilitate la volum | Viteză, non-dezvoltatori, utilizatori business |
Python este alegerea potrivită dacă vrei să înveți, să personalizezi fiecare detaliu și nu te deranjează mentenanța continuă. API-urile de scraping îți preiau partea de anti-blocare, dar tot au nevoie de cod. Iar Thunderbit este cea mai rapidă cale pentru vânzări, ecommerce ops sau oricine are nevoie doar de date — fără selectori, fără cod, fără mentenanță când Amazon își schimbă HTML-ul.
Cum extrage Thunderbit produse Amazon în 2 clickuri
Sunt subiectiv, desigur — echipa mea a construit asta. Dar fluxul chiar e atât de simplu:
- Instalează
- Mergi pe o pagină de rezultate Amazon sau pe o pagină de produs
- Click pe "AI Suggest Fields" (sau folosește template-ul instant pentru Amazon)
- Click pe "Scrape"
AI-ul Thunderbit citește pagina, identifică structura datelor și extrage totul într-un tabel curat. Poți exporta gratuit în Excel, Google Sheets, Airtable sau Notion. Beneficiul real: când Amazon își schimbă HTML-ul săptămâna viitoare (și o va face), AI-ul Thunderbit se adaptează automat. Fără scripturi defecte, fără actualizări de selectori.
Pentru îmbogățirea listelor de produse cu date din paginile de detaliu, funcția Subpage Scraping din Thunderbit urmează automat linkurile către paginile produselor și aduce câmpuri suplimentare precum imagini, descrieri și variante — ceva ce în Python necesită destul de mult cod în plus.
Sfaturi ca scraperul tău Python pentru Amazon să funcționeze pe termen lung
Dacă mergi pe varianta Python, iată cum să reduci problemele de mentenanță:
- Verifică selectorii regulat. Amazon îi schimbă frecvent. Salvează articolul acesta la bookmark — voi actualiza tabelul de selectori pe măsură ce apar schimbări.
- Monitorizează rata de succes. Urmărește raportul dintre răspunsurile 200 și 503/CAPTCHA. Setează o alertă (chiar și un simplu email) când rata de succes scade sub 80%.
- Stochează HTML-ul brut. Salvează răspunsul HTML complet împreună cu datele parsate. Dacă se schimbă selectorii, poți re-analiza datele istorice fără să extragi din nou.
- Rotește des proxy-urile și User-Agent-urile. Fingerprint-urile statice sunt detectate în câteva ore la scară mare.
- Folosește exponential backoff. Nu relua imediat după o blocare.
- Containerizează cu Docker. Pune scraperul într-un container Docker pentru deploy și portabilitate mai ușoare.
- Adaugă validare de date. Verifică dacă prețurile sunt numerice, evaluările sunt între 1–5 și titlurile nu sunt goale. O echipă a raportat o după introducerea unui strat de validare.
Sau, dacă totul asta ți se pare mai multă muncă decât ai vrut inițial, merită să te întrebi dacă un instrument fără cod precum Thunderbit nu ar fi o alegere mai bună pentru cazul tău. Nu e nicio rușine să alegi calea mai rapidă — am petrecut destui ani depanând scrapers ca să știu că, uneori, cel mai bun cod este codul pe care nu trebuie să-l scrii.
Considerații legale și etice când extragi date din Amazon
Deoarece subiectul apare în aproape orice discuție despre scraping Amazon, iată o scurtă notă despre peisajul juridic:
- Extragerea datelor disponibile public este, în general, legală în SUA. Hotărârea de referință (2022) a stabilit că accesarea datelor publice nu încalcă CFAA. Mai recent, (2024) și (2024) au întărit acest principiu.
- Termenii Amazon interzic accesul automatizat. Aceasta este o chestiune civilă (încălcare de contract), nu una penală. Instanțele au făcut, în general, distincția între cele două.
- Amazon v. Perplexity (2025) este un caz activ legat de scraping-ul cu AI al paginilor Amazon. În martie 2026 a fost emisă o ordonanță preliminară. Merită urmărit.
- Limitează-te la pagini publice. Nu extrage conținut protejat de autentificare, date personale sau orice altceva aflat în spatele autentificării.
- Respectă limitele de rată. Nu suprasolicita serverele Amazon. O întârziere de 2–5 secunde între cereri este rezonabilă.
- Folosește datele responsabil. Extrage pentru analiză, nu pentru republicarea conținutului protejat prin copyright.
- Consultă un avocat pentru utilizări comerciale la scară mare, mai ales dacă ești în UE (GDPR se aplică datelor personale).
Pentru o analiză mai detaliată, vezi ghidul nostru despre .
Concluzie
Acum ai un scraper Python funcțional pentru Amazon, cu selectori verificați pentru 2025, o strategie anti-blocare stratificată care merge mult dincolo de „adaugi un User-Agent”, opțiuni practice de programare pentru monitorizare continuă și metode de export care îți duc datele în Google Sheets, baze de date sau orice instrument folosește echipa ta.
Rezumat rapid:
- Python + curl_cffi + BeautifulSoup îți oferă control total și o rată de succes de ~94% atunci când este combinat cu impersonarea TLS
- Anti-blocarea necesită mai multe straturi: rotire de headere, impersonare TLS, rotire proxy, limitare de rată și exponential backoff
- Programarea transformă un script unic într-un pipeline de monitorizare continuă (cron, GitHub Actions sau schedulerul integrat Thunderbit)
- Exportul dincolo de CSV — Google Sheets, SQLite, Airtable, Notion — este locul unde apare valoarea reală pentru business
- Thunderbit oferă o alternativă în 2 clickuri pentru non-dezvoltatori sau pentru oricine preferă să petreacă timpul analizând datele în loc să depaneze selectori
Dacă vrei să încerci codul, tot ce este în acest ghid este gata de copiat și rulat. Iar dacă preferi să sari complet peste programare, îți permite să testezi imediat abordarea fără cod pe Amazon.
Pentru mai mult, vezi ghidurile noastre despre , și . Poți urmări și demonstrații pas cu pas pe .
Spor la scraping — și sperăm ca selectorii tăi să supraviețuiască până la următorul update Amazon.
Întrebări frecvente
1. De ce scraperul meu Python pentru Amazon este blocat după câteva cereri?
Amazon folosește un sistem de apărare pe șase niveluri: analiza reputației IP-ului, TLS fingerprinting (JA3/JA4), detectarea mediului de browser, biometrie comportamentală, provocări CAPTCHA și detectare de anomalii bazată pe ML. Un script requests de bază, cu doar un header User-Agent, obține doar aproximativ succes. Ai nevoie de impersonare TLS (curl_cffi), rotire completă de headere, rotire proxy și limitare de rată cu jitter aleatoriu pentru a menține accesul fiabil.
2. Care sunt cele mai bune biblioteci Python pentru extragerea produselor Amazon în 2025?
curl_cffi pentru cereri HTTP cu impersonare TLS (cea mai mare îmbunătățire individuală), BeautifulSoup4 cu lxml pentru parsarea HTML, pandas pentru structurarea și exportul datelor, iar Selenium sau Playwright ca fallback pentru conținutul randat în JavaScript. Python este folosit de dintre dezvoltatorii de scraping.
3. Este legal să extragi date despre produsele Amazon?
Extragerea datelor disponibile public este, în general, legală în SUA, susținută de hotărâri precum hiQ v. LinkedIn și Meta v. Bright Data. Termenii Amazon interzic accesul automatizat, dar instanțele disting între încălcările ToS (civile) și cele penale. Evită întotdeauna conținutul protejat de autentificare, respectă limitele de rată și consultă un avocat pentru utilizări comerciale la scară mare.
4. Pot extrage date din Amazon fără să scriu cod?
Da. Unelte precum îți permit să extragi produse Amazon în 2 clickuri cu o extensie Chrome. Detectarea câmpurilor alimentată de AI structurează automat datele, iar tu poți exporta gratuit în Excel, Google Sheets, Airtable sau Notion. Când Amazon își schimbă HTML-ul, AI-ul Thunderbit se adaptează fără actualizări manuale.
5. Cât de des își schimbă Amazon selectorii HTML și cum îmi mențin scraperul actualizat?
Des și fără avertisment. Comunitatea de scraping raportează că dintre crawlere au nevoie de remedieri săptămânale din cauza schimbărilor de DOM. Ca să fii cu un pas înainte, monitorizează rata de succes a scraperului, stochează HTML-ul brut pentru re-parsare și verifică selectorii regulat pe paginile live. Alternativ, instrumentele alimentate de AI precum Thunderbit se adaptează automat, eliminând această povară de mentenanță.
Află mai multe