You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Three follow-ups from watching the crawl summaries in production.
Blocked outlets. Reuters and Barron's answer every request with 401 no matter
what headers are sent, and accounted for 239 of the 241 remaining backlog
articles. They are now ingested for their headline and symbols but excluded
from the crawl query and the backlog count, so the backlog stays a useful
health signal instead of resting permanently on an uncrawlable residue.
Configurable via CRAWL_BLOCKED_DOMAINS; "none" disables it.
The exclusion is applied in SQL for the same reason the retry exclusion is:
the listing is capped and ordered newest-first, so filtering afterwards would
return batches made entirely of blocked rows.
URL sanitising. The feed intermittently appends stray characters to a URL — a
trailing backtick stored as %60 was turning a live Amazon article into a
permanent 404. Feed URLs now pass through tools.NormalizeURL before being
cached or stored.
Parser attribution. Named parsers hardcoded their outlet as the author when
their byline selector missed, which suppressed the real byline the generic
extractor could find; TechCrunch articles were credited to "TechCrunch"
instead of their writer. The placeholders are gone and parseGeneric now runs
behind every named parser, filling only fields left empty. Verified against
live pages: TechCrunch now resolves the actual byline.
Also adds a livecheck-tagged extraction harness for checking parsers against
real pages, and logs empty extractions at Warn with the domain so the outlets
the extractor cannot handle are visible without enabling debug logging.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rfuggi7P8UanYTYuXQkVm3
0 commit comments