Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

142
Vistas
Compara dos arreglos con node.js y titiritero

Me baso en un web-scrapper, que, digamos, elimine las URL de Google

Obtengo una serie de URL de los resultados de Google:

 const linkSelector = 'div.yuRUbf > a'
let links = await page.$$eval(linkSelector, link => {
 return link.map( x => x.href)
})

la salida de 'enlaces' es algo así:

 [
'https://google.com/.../antyhing'
'https://amazon.com/.../antyhing'
'https://twitter.com/.../antyhing'
]

Ahora tengo una 'lista negra', con algo así:

 [
'https://amazon.com'
]

Por el momento, me quedé en ese punto donde puedo comparar ambas matrices y eliminar estas URL de los 'enlaces' que figuran en mi lista negra.

Así que se me ocurrió la idea de obtener el dominio de la URL dentro de mi matriz de enlaces, así:

 const linkList = []
for ( const link of links ) {

const url = new URL(link)
const domain = url.origin
linkList.push(domain)

}

Sí, ahora tengo dos matrices que puedo comparar entre sí y eliminar el dominio de la lista negra, pero perdí la URL completa con la que necesito trabajar...

 for( let i = linkList.length - 1; i >= 0; i--){
 for( let j=0; j < blacklist.length; j++){
 if( linkList[i] === blacklist[j]){
 linkList.splice(i, 1);
 }
 }
}

Code Snippet es parte de la respuesta dada, aquí: Compare dos matrices de Javascript y elimine los duplicados

¿Alguna idea de cómo puedo hacer esto, con titiritero y node.js?

almost 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No pude encontrar un engaño obvio, así que convertí mis comentarios en una respuesta:

.includes :

 const allowedLinks = links.filter(link => !blacklist.some(e => link.includes(e)))

.startsWith :

 const allowedLinks = links.filter(link => !blacklist.some(e => link.startsWith(e)))

La segunda versión es más precisa. Si desea utilizar la versión URL, esto debería funcionar:

 const links = [
 "https://google.com/.../antyhing",
 "https://amazon.com/.../antyhing",
 "https://twitter.com/.../antyhing",
];
const blacklist = ["https://amazon.com"];

const allowedLinks = links.filter(link =>
 !blacklist.some(black =>
 black.startsWith(new URL(link).origin) // or use ===
 )
);
console.log(allowedLinks);

En cuanto a Puppeteer, dudo que importe si haces esto del lado del node o del lado del navegador, a menos que estas matrices sean enormes. En ese tren de pensamiento, técnicamente tenemos un algoritmo cuadrático aquí, pero no me preocuparía a menos que tenga muchos cientos de miles de elementos y esté notando la lentitud. En ese caso, puede poner los orígenes de la lista negra en un Set de datos y buscar el origen de cada enlace en eso. El problema con esto es que es un === preciso, por lo que tendría que crear un conjunto de prefijos si necesita conservar la semántica .startsWith . Es probable que esto sea innecesario y esté fuera del alcance de esta respuesta, pero vale la pena mencionarlo brevemente.

almost 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda