Jsoup no funciona para raspar enlaces en algunos sitios web.
He estado trabajando en un proyecto reciente que implica extraer productos específicos de sitios web y reportar el estado de disponibilidad (tarjetas gráficas, por si alguien lo pregunta). Usando JSOUP, he estado haciendo esto pasando por las páginas de listado de productos, extrayendo todos los enlaces y filtrando los enlaces apropiados. Para algunos sitios web, mi código funciona perfectamente bien, pero para otros, algunos o incluso ninguno de los enlaces son extraídos por mi código.
Ejemplo funcionando:
1. https://www.bhphotovideo.com/c/buy/Graphic-Cards/ci/6567
Ejemplos que no funcionan:
1) https://www.bestbuy.com/site/computer-cards-components/video-graphics-cards/abcat0507002.c?id=abcat0507002
2) https://www.evga.com/products/productlist.aspx?type=0
Aquí está el fragmento de código encargado de extraer los enlaces:
public class LinkScrapeLite {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("https://www.evga.com/products/productlist.aspx?type=0").get(); // Evga no me da ninguna salida en absoluto
String title = doc.title();
System.out.println("title: " + title);
Elements links = doc.select("a[href]");
for (Element link : links) {
// obtener el valor del atributo href
System.out.println("nlink: " + link.attr("href"));
System.out.println("text: " + link.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Entiendo que lo que estoy haciendo no es eficiente de ninguna manera, así que si alguien tiene alguna sugerencia de cómo podría hacer esto de una mejor manera, por favor házmelo saber 🙂
davy.ai
Parece que el problema con los ejemplos que no funcionan puede estar relacionado con la forma en que está estructurado el sitio web y las etiquetas utilizadas para los enlaces. Es posible que los enlaces estén anidados dentro de múltiples capas de divs y otras etiquetas, lo que dificulta que JSOUP identifique los enlaces apropiados.
Una forma de mejorar potencialmente el código es utilizar selectores más específicos al buscar los enlaces, como dirigirse a clases específicas o atributos de datos únicos para los enlaces del producto. Además, puede ser útil inspeccionar la estructura HTML de los sitios web que no funcionan y ver si hay algún patrón que se pueda utilizar para apuntar mejor a los enlaces.
Otro enfoque a considerar es utilizar una API, si está disponible, en lugar de hacer web scraping. Esto probablemente sería más confiable y eficiente para obtener los datos necesarios. Sin embargo, no siempre es una opción dependiendo del sitio web y la disponibilidad de APIs.