Anwendungsfälle

Datenerfassung von Einzelhandelsstandorten mit CAPTCHA-Verwaltung

Amazon verwendet Bild-CAPTCHAs, um den automatisierten Zugriff zu blockieren. Wenn Sie den Anti-Bot-Schwellenwert erreichen, wird eine Seite angezeigt, auf der Sie aufgefordert werden, Zeichen aus einem verzerrten Bild einzugeben. Die OCR-Lösung von CaptchaAI verarbeitet diese automatisch.

So funktioniert das CAPTCHA von Amazon

Amazon löst CAPTCHAs basierend auf:

Signal Beschreibung
Volumen anfordern Zu viele Anfragen von einer IP in einem kurzen Fenster
Fehlende Kekse Keine Amazon-Sitzungscookies
Verdächtige Header Bot-ähnlicher User-Agent oder fehlende Header
IP-Reputation Bekannte Rechenzentrums- oder Proxy-IP-Bereiche

Bei Auslösung leitet Amazon zu einer Seite mit einem verzerrten Textbild und einem Eingabefeld weiter. Sie müssen das Bild lösen und den Text einreichen, um fortzufahren.

Anforderungen

Anforderung Einzelheiten
CaptchaAI API-Schlüssel Auscaptchaai.com
Python 3.7+ Mit Wünschen und schöner Suppe4
Wohn-Proxys Empfohlen für anhaltendes Schaben

Lösen des Bild-CAPTCHA von Amazon

Schritt 1: Ermitteln Sie die CAPTCHA-Seite

import requests
from bs4 import BeautifulSoup

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
})

def is_captcha_page(html):
    return "Type the characters you see in this image" in html or \
           "captcha" in html.lower()

url = "https://www.amazon.com/dp/B0EXAMPLE"
resp = session.get(url)

if is_captcha_page(resp.text):
    print("CAPTCHA detected!")
else:
    print("Page loaded successfully")

Schritt 2: Extrahieren und lösen Sie das Bild

import base64

API_KEY = "YOUR_API_KEY"

def solve_amazon_captcha(session, captcha_page_html, captcha_page_url):
    soup = BeautifulSoup(captcha_page_html, "html.parser")

    # Find the CAPTCHA image
    img_tag = soup.find("img", src=lambda s: s and "captcha" in s.lower())
    if not img_tag:
        raise Exception("CAPTCHA image not found")

    img_url = img_tag["src"]

    # Download the image
    img_resp = session.get(img_url)
    img_base64 = base64.b64encode(img_resp.content).decode()

    # Submit to CaptchaAI
    submit_resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "base64",
        "body": img_base64
    })
    task_id = submit_resp.text.split("|")[1]

    # Poll for result
    import time
    for _ in range(30):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY":
            continue
        if result.text.startswith("OK|"):
            return result.text.split("|")[1]
        raise Exception(f"Solve error: {result.text}")

    raise TimeoutError("Solve timed out")

Schritt 3: Senden Sie die Lösung

def submit_captcha_solution(session, captcha_page_html, solution, captcha_page_url):
    soup = BeautifulSoup(captcha_page_html, "html.parser")
    form = soup.find("form")

    # Build form data
    form_data = {}
    for inp in form.find_all("input"):
        name = inp.get("name")
        if name:
            form_data[name] = inp.get("value", "")

    # Set the CAPTCHA answer
    form_data["field-keywords"] = solution

    # Submit
    action = form.get("action", captcha_page_url)
    if action.startswith("/"):
        from urllib.parse import urljoin
        action = urljoin(captcha_page_url, action)

    resp = session.post(action, data=form_data)
    return resp

Vollständiges Arbeitsbeispiel

import requests
import base64
import time
from bs4 import BeautifulSoup

API_KEY = "YOUR_API_KEY"

def scrape_amazon_product(url):
    session = requests.Session()
    session.headers.update({
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
        "Accept-Language": "en-US,en;q=0.9"
    })

    resp = session.get(url)

    # Handle CAPTCHA if present
    if "captcha" in resp.text.lower():
        soup = BeautifulSoup(resp.text, "html.parser")
        img = soup.find("img", src=lambda s: s and "captcha" in s.lower())

        if img:
            # Download and solve
            img_data = session.get(img["src"]).content
            img_b64 = base64.b64encode(img_data).decode()

            submit = requests.get("https://ocr.captchaai.com/in.php", params={
                "key": API_KEY, "method": "base64", "body": img_b64
            })
            task_id = submit.text.split("|")[1]

            for _ in range(30):
                time.sleep(5)
                result = requests.get("https://ocr.captchaai.com/res.php", params={
                    "key": API_KEY, "action": "get", "id": task_id
                })
                if result.text == "CAPCHA_NOT_READY":
                    continue
                if result.text.startswith("OK|"):
                    solution = result.text.split("|")[1]
                    break

            # Submit solution
            form = soup.find("form")
            form_data = {inp.get("name"): inp.get("value", "")
                        for inp in form.find_all("input") if inp.get("name")}
            form_data["field-keywords"] = solution

            action = form.get("action", url)
            resp = session.post(action, data=form_data)

    # Parse product data
    soup = BeautifulSoup(resp.text, "html.parser")
    title = soup.find("span", {"id": "productTitle"})
    price = soup.find("span", class_="a-price-whole")

    return {
        "title": title.text.strip() if title else None,
        "price": price.text.strip() if price else None
    }

product = scrape_amazon_product("https://www.amazon.com/dp/B0EXAMPLE")
print(product)

Best Practices für Amazon Scraping

  1. Verwenden Sie private Proxys – Amazon blockiert IPs von Rechenzentren aggressiv
  2. Benutzeragenten rotieren – Verwenden Sie einen Pool realistischer Browserzeichenfolgen
  3. Sitzungen beibehalten – Cookies über alle Anfragen hinweg beibehalten
  4. Verzögerungen hinzufügen – 3–10 Sekunden zwischen Anfragen
  5. Accept-Language festlegen – Immer Gebietsschema-Header einschließen
  6. Keine eingeloggten Seiten durchsuchen – Produktseiten sind ohne Anmeldung zugänglich

Fehlerbehebung

Problem Beheben
CAPTCHA bei jeder Anfrage Verwenden Sie Wohn-Proxys. Verlangsamen Sie die Anforderungsrate
CAPTCHA-Lösung abgelehnt Überprüfen Sie, ob das Bild korrekt heruntergeladen wurde. Versuchen Sie es erneut
Schleifen umleiten Überprüfen Sie den Umgang mit Cookies. Verwenden Sie allow_redirects=True
Leere Produktdaten Amazon bietet möglicherweise unterschiedliche Layouts an. Überprüfen Sie die Selektoren

FAQ

Verwendet Amazon reCAPTCHA?

Amazon verwendet hauptsächlich sein eigenes bildbasiertes CAPTCHA (verzerrter Text). CaptchaAI löst diese mithilfe des Endpunkts method=base64 für die Lösung von image/OCR.

Wie viele Anfragen dauert es, bis Amazon ein CAPTCHA anzeigt?

Es variiert. Mit guten Proxys und realistischen Headern können Sie Hunderte von Seiten durchsuchen. Ohne Proxys können CAPTCHAs nach 10–20 Anfragen erscheinen.

Das Scrapen öffentlich verfügbarer Produktdaten ist im Allgemeinen legal, prüfen Sie jedoch die Nutzungsbedingungen von Amazon und die in Ihrem Land geltenden Gesetze.

Verwandte Leitfäden

Diskussionen (0)

Noch keine Kommentare.