fix(scraper): _unwrap_news_link normaliza //url y descarta apiclick sin URL usable
Un ?url= protocol-relative (//publisher.com/...) caía por el startswith('http')
y devolvía el link apiclick.aspx crudo, que pasaba blacklist y relevancia y
acababa raspado como página de redirect/consent de Bing. Ahora se antepone
https: a los protocol-relative y, si no se puede extraer URL válida de un
apiclick, se devuelve '' para que el caller lo salte.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
b58a3ce118
commit
fbe8ae1885
@@ -113,16 +113,19 @@ def is_blacklisted(url: str) -> bool:
|
||||
def _unwrap_news_link(link: str) -> str:
|
||||
"""Bing News envuelve los links de entry en apiclick.aspx; la URL real del
|
||||
publisher viene en texto plano en el parámetro ?url=. Cualquier otro link
|
||||
pasa sin tocar."""
|
||||
pasa sin tocar. Si es un apiclick pero no trae URL usable, devuelve "" —
|
||||
el caller lo descarta por startswith("http") — en vez de dejar pasar el
|
||||
redirect de bing.com, que se rasparía como página de consent/basura."""
|
||||
try:
|
||||
parsed = urlparse(link)
|
||||
if (parsed.netloc.lower().endswith("bing.com")
|
||||
and parsed.path == "/news/apiclick.aspx"):
|
||||
real = parse_qs(parsed.query).get("url", [""])[0]
|
||||
if real.startswith("http"):
|
||||
return real
|
||||
real = parse_qs(parsed.query).get("url", [""])[0].strip()
|
||||
if real.startswith("//"): # protocol-relative
|
||||
real = "https:" + real
|
||||
return real if real.startswith("http") else ""
|
||||
except Exception:
|
||||
pass
|
||||
return ""
|
||||
return link
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user