docs: correct Bright Data proxy type (ISP, flat-rate not per-GB)

It is an ISP proxy (static ISP IPs, flat billing), not residential —
so HTML-ingest bandwidth is free and the full deep-crawl is fine.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
jtrzupek 2026-06-10 19:18:40 +02:00
parent 21bc8bf1fe
commit 956a0feb22
5 changed files with 9 additions and 9 deletions

View file

@ -121,9 +121,9 @@ class Settings(BaseSettings):
hetzner_alert_warning_pct: int = Field(default=80, validation_alias="HETZNER_ALERT_WARNING_PCT") hetzner_alert_warning_pct: int = Field(default=80, validation_alias="HETZNER_ALERT_WARNING_PCT")
hetzner_alert_error_pct: int = Field(default=95, validation_alias="HETZNER_ALERT_ERROR_PCT") hetzner_alert_error_pct: int = Field(default=95, validation_alias="HETZNER_ALERT_ERROR_PCT")
# Bright Data residential proxy — używany TYLKO do ingestu HTML (scrape) tubów # Bright Data ISP proxy (stałe IP od ISP, rozliczane ryczałtem NIE per-GB) —
# które blokują VPS IP twardym Cloudflare 403 nawet z browser-TLS (superporn). # używany do ingestu HTML (scrape) tubów które blokują VPS IP twardym Cloudflare
# NIE do streamowania wideo (transfer leciałby przez płatne proxy + tokeny i tak # 403 nawet z browser-TLS (superporn). Streamu i tak nie ruszamy proxy (tokeny CDN
# IP-bound). Format env: `host:port:user:pass` (panel Bright Data). Pusty = brak. # IP-bound). Format env: `host:port:user:pass` (panel Bright Data). Pusty = brak.
brightdata_proxy_raw: str = Field(default="", validation_alias="BRIGHTDATA_PROXY_URL") brightdata_proxy_raw: str = Field(default="", validation_alias="BRIGHTDATA_PROXY_URL")

View file

@ -227,7 +227,7 @@ ALL_BROWSE_SCRAPERS: list[type[BaseBrowseScraper]] = [
NepornScraper, NepornScraper,
# SuperpornScraper — dołączony 2026-06-10 (user request). superporn blokuje VPS IP # SuperpornScraper — dołączony 2026-06-10 (user request). superporn blokuje VPS IP
# twardym CF 403 (każda impersonacja TLS), więc ingest HTML idzie przez Bright Data # twardym CF 403 (każda impersonacja TLS), więc ingest HTML idzie przez Bright Data
# residential proxy (BRIGHTDATA_PROXY_URL). Pierwszy scraper z proxy — `_proxy` w # ISP proxy (BRIGHTDATA_PROXY_URL, ryczałt nie per-GB). Pierwszy scraper z proxy — `_proxy` w
# _browse_base. JSON-LD (title+desc+uploadDate+thumb+duration) + chipy pornstar/ # _browse_base. JSON-LD (title+desc+uploadDate+thumb+duration) + chipy pornstar/
# kategorie. Playback IP-bound → WebView (extractor superporncom → _vps_blocked_fallback). # kategorie. Playback IP-bound → WebView (extractor superporncom → _vps_blocked_fallback).
# Bez proxy: scraper no-op (pusty iterator). # Bez proxy: scraper no-op (pusty iterator).

View file

@ -53,7 +53,7 @@ class BaseBrowseScraper(BaseDirectTubeScraper, abc.ABC):
_proxy: str | None = None _proxy: str | None = None
"""Opcjonalny proxy (http://user:pass@host:port) dla listing+detail fetchy. """Opcjonalny proxy (http://user:pass@host:port) dla listing+detail fetchy.
Ustawiany przez scrapery tubów blokujących VPS IP (superporn Bright Data Ustawiany przez scrapery tubów blokujących VPS IP (superporn Bright Data
residential). None = bezpośredni fetch (domyślnie).""" ISP proxy). None = bezpośredni fetch (domyślnie)."""
@abc.abstractmethod @abc.abstractmethod
def _listing_url(self, page: int) -> str: def _listing_url(self, page: int) -> str:

View file

@ -1,8 +1,8 @@
"""superporn.com — latest-vids browse scraper (przez Bright Data residential proxy). """superporn.com — latest-vids browse scraper (przez Bright Data ISP proxy).
Dołączony 2026-06-10 (user request). superporn twardo blokuje VPS IP Cloudflarem Dołączony 2026-06-10 (user request). superporn twardo blokuje VPS IP Cloudflarem
(403 na KAŻDEJ impersonacji TLS chrome/safari/firefox), więc ingest HTML idzie (403 na KAŻDEJ impersonacji TLS chrome/safari/firefox), więc ingest HTML idzie
przez Bright Data residential proxy (`settings.brightdata_proxy_url`). Gdy proxy przez Bright Data ISP proxy (`settings.brightdata_proxy_url`). Gdy proxy
nieskonfigurowane scraper no-op (pusty iterator, log warning). nieskonfigurowane scraper no-op (pusty iterator, log warning).
Proxy używamy TYLKO do scrape HTML. Playback NIE idzie przez proxy: `<source>` mp4 Proxy używamy TYLKO do scrape HTML. Playback NIE idzie przez proxy: `<source>` mp4
@ -95,7 +95,7 @@ class SuperpornScraper(BaseBrowseScraper):
def __init__(self) -> None: def __init__(self) -> None:
super().__init__() super().__init__()
# Bright Data residential — bez niego superporn jest nieosiągalny z VPS. # Bright Data ISP proxy — bez niego superporn jest nieosiągalny z VPS.
self._proxy = get_settings().brightdata_proxy_url self._proxy = get_settings().brightdata_proxy_url
if not self._proxy: if not self._proxy:
log.warning("superporn: BRIGHTDATA_PROXY_URL unset — scraper disabled") log.warning("superporn: BRIGHTDATA_PROXY_URL unset — scraper disabled")

View file

@ -62,7 +62,7 @@ def browser_get(
`proxy` (http://user:pass@host:port) routuje request przez proxy. Używane `proxy` (http://user:pass@host:port) routuje request przez proxy. Używane
tylko do ingestu HTML tubów blokujących VPS IP (np. superporn przez Bright Data tylko do ingestu HTML tubów blokujących VPS IP (np. superporn przez Bright Data
residential). NIE dla streamów.""" ISP proxy). NIE dla streamów."""
if not _HAS_CURL_CFFI: if not _HAS_CURL_CFFI:
proxies = {"http://": proxy, "https://": proxy} if proxy else None proxies = {"http://": proxy, "https://": proxy} if proxy else None
with httpx.Client( with httpx.Client(