Use Cases

Nachrichten- und Medienaggregation mit CAPTCHA-Verwaltung

Nachrichtenagenturen und Medienplattformen verwenden CAPTCHAs, um Inhalte vor automatisierter Aggregation zu schützen. Medienbeobachter, PR-Firmen und Forschungsorganisationen müssen Artikel programmatisch sammeln. CaptchaAI bearbeitet CAPTCHA-Herausforderungen über Nachrichtenquellen hinweg.

Der entscheidende operative Unterschied liegt meist nicht im CAPTCHA-Typ, sondern in der Sammelstrategie pro Quelle. Breaking-News-Feeds, lokale Nachrichtenseiten und Presseportale vertragen selten dieselbe Abrufkadenz oder denselben Session-Rhythmus.

Wie sollte die Sammelgeschwindigkeit pro Quelle aussehen?

Quelltyp Typische Kadenz Warum
Große Newswires und schnelle Feeds Engmaschig, aber kontrolliert Inhalte ändern sich laufend, reagieren aber empfindlich auf aggressive Muster
Lokale oder regionale Nachrichtenseiten Moderat Weniger Updates, oft schwächere Infrastruktur
Pressemitteilungen und statische Archivseiten Langsamer Batch Änderungen sind seltener, unnötige Last erzeugt nur mehr Schutzmechanismen
Paywall- oder Premium-Inhalte Sehr vorsichtig und sitzungsstabil Reibung entsteht oft aus Session- und Zugriffsmustern, nicht nur aus dem CAPTCHA

CAPTCHAs auf Nachrichtenplattformen

Quelltyp CAPTCHA Auslöser Inhalt
Wichtige Nachrichtenagenturen Cloudflare Turnstile Bot-Erkennung Artikel, Schlagzeilen
Nachrichtendienste (AP, Reuters) reCAPTCHA v2 Massenzugriff Aktuelle Nachrichten
Bezahlpflichtige Veröffentlichungen reCAPTCHA v3 Zugriffsversuche Premium-Artikel
Lokale Nachrichtenseiten reCAPTCHA v2 Ratenbegrenzung Regionale Nachrichten
Nachrichtenaggregatoren Cloudflare Challenge Kratzerkennung Aggregierte Feeds
Websites mit Pressemitteilungen Bild-CAPTCHA Seiten herunterladen PR-Inhalte

Nachrichtenaggregator

import requests
import time
import re
from bs4 import BeautifulSoup
from datetime import datetime
import json

CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def solve_captcha(method, sitekey, pageurl, **kwargs):
    data = {
        "key": CAPTCHAAI_KEY, "method": method,
        "googlekey": sitekey, "pageurl": pageurl, "json": 1,
    }
    data.update(kwargs)
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data=data)
    task_id = resp.json()["request"]
    for _ in range(60):
        time.sleep(5)
        result = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        r = result.json()
        if r["request"] != "CAPCHA_NOT_READY":
            return r["request"]
    raise TimeoutError("Timeout")


class NewsAggregator:
    def __init__(self, proxy=None):
        self.session = requests.Session()
        if proxy:
            self.session.proxies = {"http": proxy, "https": proxy}
        self.session.headers.update({
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
            "AppleWebKit/537.36 Chrome/126.0.0.0 Safari/537.36",
            "Accept-Language": "en-US,en;q=0.9",
        })

    def collect_headlines(self, source_url, section=None):
        """Collect headlines from a news source."""
        url = f"{source_url}/{section}" if section else source_url
        resp = self.session.get(url, timeout=30)

        if self._has_captcha(resp.text):
            resp = self._solve_and_retry(resp.text, url)

        soup = BeautifulSoup(resp.text, "html.parser")
        articles = []

        for item in soup.select("article, .story, .headline-item, h2 a, h3 a"):
            link = item if item.name == "a" else item.select_one("a")
            if link:
                articles.append({
                    "title": link.get_text(strip=True),
                    "url": self._abs_url(source_url, link.get("href", "")),
                    "source": source_url,
                    "collected_at": datetime.now().isoformat(),
                })

        return articles

    def get_article(self, article_url):
        """Fetch full article content."""
        resp = self.session.get(article_url, timeout=30)

        if self._has_captcha(resp.text):
            resp = self._solve_and_retry(resp.text, article_url)

        soup = BeautifulSoup(resp.text, "html.parser")

        # Remove unwanted elements
        for tag in soup.select("script, style, nav, footer, .ad, .sidebar"):
            tag.decompose()

        content_el = soup.select_one(
            "article, .article-body, .story-body, .entry-content"
        )

        return {
            "url": article_url,
            "title": self._text(soup, "h1, .article-title"),
            "author": self._text(soup, ".author, .byline, [rel='author']"),
            "date": self._text(soup, "time, .publish-date, .article-date"),
            "content": content_el.get_text(separator="\n", strip=True) if content_el else "",
            "word_count": len(content_el.get_text().split()) if content_el else 0,
        }

    def aggregate_sources(self, sources, max_articles_per=20):
        """Aggregate headlines across multiple sources."""
        all_articles = []

        for source in sources:
            try:
                articles = self.collect_headlines(source["url"], source.get("section"))
                all_articles.extend(articles[:max_articles_per])
                print(f"{source['name']}: {len(articles)} headlines")
            except Exception as e:
                print(f"{source['name']}: Error - {e}")
            time.sleep(3)

        return all_articles

    def _has_captcha(self, html):
        return any(tag in html.lower() for tag in [
            'data-sitekey', 'g-recaptcha', 'cf-turnstile',
        ])

    def _solve_and_retry(self, html, url):
        match = re.search(r'data-sitekey="([^"]+)"', html)
        if not match:
            return self.session.get(url)
        sitekey = match.group(1)
        if 'cf-turnstile' in html:
            token = solve_captcha("turnstile", sitekey, url)
            return self.session.post(url, data={"cf-turnstile-response": token})
        token = solve_captcha("userrecaptcha", sitekey, url)
        return self.session.post(url, data={"g-recaptcha-response": token})

    def _text(self, soup, selector):
        el = soup.select_one(selector)
        return el.get_text(strip=True) if el else ""

    def _abs_url(self, base, href):
        if href.startswith("http"):
            return href
        return base.rstrip("/") + "/" + href.lstrip("/")


# Usage
aggregator = NewsAggregator(
    proxy="http://user:pass@residential.proxy.com:5000"
)

sources = [
    {"name": "Tech News A", "url": "https://technews-a.example.com", "section": "latest"},
    {"name": "Business B", "url": "https://business-b.example.com", "section": "tech"},
    {"name": "Industry C", "url": "https://industry-c.example.com"},
]

headlines = aggregator.aggregate_sources(sources)
print(f"Total: {len(headlines)} headlines collected")

Schlüsselwortbasiertes Nachrichtenmonitoring

class NewsMonitor:
    def __init__(self, keywords, sources, proxy=None):
        self.keywords = [kw.lower() for kw in keywords]
        self.aggregator = NewsAggregator(proxy=proxy)
        self.sources = sources
        self.seen_urls = set()

    def scan(self):
        """Scan for articles matching keywords."""
        headlines = self.aggregator.aggregate_sources(self.sources)
        matches = []

        for article in headlines:
            if article["url"] in self.seen_urls:
                continue

            title_lower = article["title"].lower()
            matched_kws = [kw for kw in self.keywords if kw in title_lower]

            if matched_kws:
                article["matched_keywords"] = matched_kws
                matches.append(article)
                self.seen_urls.add(article["url"])

        return matches

    def continuous_monitor(self, interval_min=30):
        """Run continuous monitoring with alerts."""
        while True:
            matches = self.scan()
            if matches:
                print(f"\n=== {len(matches)} new matches found ===")
                for m in matches:
                    print(f"  [{', '.join(m['matched_keywords'])}] {m['title']}")
                    print(f"    {m['url']}")
            else:
                print(f"No new matches at {datetime.now().strftime('%H:%M')}")

            time.sleep(interval_min * 60)


# Monitor for specific topics
monitor = NewsMonitor(
    keywords=["captcha", "bot detection", "web scraping", "automation"],
    sources=sources,
    proxy="http://user:pass@residential.proxy.com:5000",
)
matches = monitor.scan()

Fehlerbehebung

Problem Ursache Lösung
Cloudflare blockiert alle Anfragen Aggressive Bot-Erkennung Verwenden Sie einen Wohn-Proxy + realistische UA
Paywall statt Artikel Inhalt hinter dem Abonnement Paywall erkennen, überspringen oder verwalten
CAPTCHA auf jeder Seite IP markiert Proxy rotieren, Verzögerungen von mehr als 5 Sekunden hinzufügen
Artikelinhalt leer JS-gerenderter Inhalt Verwenden Sie Selenium/Puppeteer für SPA-Sites
Doppelte Artikel Dieselbe Geschichte aus mehreren Quellen Nach Titelähnlichkeit deduplizieren

FAQ

Das Sammeln von Schlagzeilen und Metadaten für Recherche- oder Überwachungszwecke ist gängige Praxis. Die Reproduktion vollständig urheberrechtlich geschützter Artikel ohne Genehmigung ist nicht möglich. Verwenden Sie Snippets und verlinken Sie zurück zur Originalquelle.

Wie gehe ich mit Paywall-Inhalten um?

Erkennen Sie die Paywall (suchen Sie nach Paywall-CSS-Klassen oder begrenzter Inhaltslänge) und kennzeichnen Sie sie. Greifen Sie nur auf Inhalte zu, zu deren Anzeige Sie berechtigt sind.

Welcher Proxy-Typ eignet sich am besten für Nachrichtenseiten?

Rotierende Wohn-Proxys funktionieren am besten. Große Nachrichtenagenturen nutzen Cloudflare, das die IPs von Rechenzentren aggressiv blockiert.


Verwandte Leitfäden

  • Rotierende Residential-Proxys
  • Social-Media-Forschung

Nachrichten aus beliebigen Quellen aggregieren – Holen Sie sich Ihren CaptchaAI-Schlüssel und starten Sie die Automatisierung.isieren Sie die Inhaltserfassung.*

Kommentare sind für diesen Artikel deaktiviert.

Verwandte Beiträge

Comparisons Headless vs. Headed Chrome für CAPTCHA-Tests in eigener QA
Wann sich Headless-Chrome und wann Headed-Chrome für CAPTCHA-Tests in eigenen CI- und QA-Pipelines eignet, und welche Auswirkungen die Wahl auf Stabilität und L...

Wann sich Headless-Chrome und wann Headed-Chrome für CAPTCHA-Tests in eigenen CI- und QA-Pipelines eignet, und...

Apr 17, 2026
Use Cases Überwachung des Einzelhandelsbestands mit CAPTCHA-Verwaltung
Einzelhandelsbestand überwachen trotz CAPTCHA: Produktverfügbarkeit, Preise und Lagerstatus automatisiert erfassen.

Einzelhandelsbestand überwachen trotz CAPTCHA: Produktverfügbarkeit, Preise und Lagerstatus automatisiert erfa...

Apr 20, 2026