2026-06-30 03:02:40 -07:00
|
|
|
"""App-wide crawler block classification (Apache-2.0, generic).
|
|
|
|
|
|
|
|
|
|
Phase 3e (Slice A). Mirrors ``app/utils/proxy`` and ``app/utils/captcha``: this
|
|
|
|
|
package holds only the **generic, vendor-agnostic** glue — here, a pure block
|
|
|
|
|
classifier (passive telemetry from public anti-bot markers). It is consumed by
|
|
|
|
|
the separately licensed proprietary crawler to label ``CrawlOutcome.block_type``.
|
|
|
|
|
|
|
|
|
|
The **bypass-specific tuning** (the stealth kwargs builder / geoip coherence, and
|
|
|
|
|
the deferred WebGL spoof + humanize choreography) is NOT generic and lives under
|
|
|
|
|
the proprietary boundary in ``app/proprietary/web_crawler/`` (``stealth.py``).
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
from app.utils.crawl.classifier import BlockType, classify_block
|
2026-07-05 03:51:16 -07:00
|
|
|
from app.utils.crawl.contacts import Contacts, extract_contacts, is_social_host
|
2026-06-30 03:02:40 -07:00
|
|
|
|
|
|
|
|
__all__ = [
|
|
|
|
|
"BlockType",
|
2026-07-05 03:51:16 -07:00
|
|
|
"Contacts",
|
2026-06-30 03:02:40 -07:00
|
|
|
"classify_block",
|
2026-07-05 03:51:16 -07:00
|
|
|
"extract_contacts",
|
|
|
|
|
"is_social_host",
|
2026-06-30 03:02:40 -07:00
|
|
|
]
|