No puedo encontrar ninguna buena API basada en Java. El sitio que necesito eliminar no proporciona ninguna API; Quiero iterar sobre todas las páginas web usando algún pageID y extraer los títulos HTML / otras cosas en sus árboles DOM.
¿Hay otras formas además del raspado web?
Gracias
Extraer el título no es difícil, y tiene muchas opciones, busque aquí en Desbordamiento de stack para ” analizadores HTML de Java “. Uno de ellos es Jsoup .
Puede navegar la página usando DOM si conoce la estructura de la página, vea http://jsoup.org/cookbook/extracting-data/dom-navigation
Es una buena biblioteca y la he usado en mis últimos proyectos.
Su mejor opción es usar Selenium Web Driver ya que
Lento. No afecta a páginas web como HtmlUnit, pero a veces no desea golpear demasiado rápido.
Htmlunit es rápido pero es horrible en el manejo de Javascript y AJAX.
HTMLUnit se puede utilizar para hacer raspado web, admite la invocación de páginas, llenado y envío de formularios. Lo he usado en mi proyecto. Es una buena biblioteca de Java para raspar web. lea aquí para más
mecanize para Java sería una buena opción para esto, y como Wadjy Essam mencionó usa JSoup para HMLT. mechanize es un cliente HTTP / HTML que soporta la navegación, los envíos de formularios y el raspado de páginas.
http://gistlabs.com/software/mechanize-for-java/ (y el GitHub aquí https://github.com/GistLabs/mechanize )
También hay Jaunt Java Web Scraping & JSON Querying – http://jaunt-api.com
Mire un analizador HTML como TagSoup, HTMLCleaner o NekoHTML.
Con el rascador web, puede extraer el contenido útil de la página web y convertirlo a cualquier formato según corresponda.
WebScrap ws= new WebScrap(); //set your extracted website url ws.setUrl("http://dasnicdev.github.io/webscrap4j/"); //start scrap session ws.startWebScrap();
Ahora su sesión de eliminación de contenido web comienza y está lista para eliminar o extraer datos en Java utilizando la biblioteca webscrap4j .
Para el título:
System.out.println("-------------------Title-----------------------------"); System.out.println(ws.getSingleHTMLTagData("title"));
Por lema:
System.out.println("-------------------Tagline-----------------------------"); System.out.println(ws.getSingleHTMLScriptData("", "
"));
Para todas las tags de anclaje:
System.out.println("-------------------All anchor tag-----------------------------"); al=ws.getImageTagData("a", "href"); for(String adata: al) { System.out.println(adata); }
Para datos de imagen:
System.out.println("-------------------Image data-----------------------------"); System.out.println(ws.getImageTagData("img", "src")); System.out.println(ws.getImageTagData("img", "alt"));
Para Ul-Li Data:
System.out.println("-------------------Ul-Li Data-----------------------------"); al=ws.getSingleHTMLScriptData("", "
",""," "); for(String str:al) { System.out.println(str); }
Para ver el código fuente completo, consulte este tutorial .
¡Podrías buscar en jwht-scrapper !
Este es un marco completo de eliminación de desechos que tiene todas las características que un desarrollador podría esperar de un scrapper web:
Funciona con (jwht-htmltopojo) [ https://github.com/whimtrip/jwht-htmltopojo ) lib que itsef usa Jsoup mencionado por otras personas aquí.
¡Juntos lo ayudarán a construir impresionantes scrappers que mapeen directamente HTML a POJOs y eludiendo cualquier problema de descarte clásico en cuestión de minutos!
Espero que esto pueda ayudar a algunas personas aquí!
Descargo de responsabilidad, yo soy el que lo desarrolló, no dude en decirme sus comentarios!
Si desea automatizar el raspado de páginas o datos de gran cantidad, puede probar Gotz ETL .
Es completamente impulsado por un modelo como una verdadera herramienta de ETL. La estructura de datos, el flujo de trabajo de tareas y las páginas para raspar se definen con un conjunto de archivos de definición XML y no se requiere encoding. La consulta puede escribirse utilizando Selectores con JSoup o XPath con HtmlUnit.