Je ne suis pas en mesure de trouver un bon site Web en train de gratter Java. Le site que je dois gratter ne fournit pas non plus d'API; je souhaite parcourir toutes les pages Web à l'aide de pageID
et extrayez les titres HTML/autres éléments dans leurs arborescences DOM.
Existe-t-il d'autres moyens que le raclage Web?
Extraire le titre n’est pas difficile, et vous avez beaucoup d’options, cherchez ici "Stack Overflow" pour " Analyseurs HTML Java ". L'un d'eux est Jsoup .
Vous pouvez naviguer dans la page en utilisant DOM si vous connaissez la structure de la page, voir http://jsoup.org/cookbook/extracting-data/dom-navigation
C'est une bonne bibliothèque et je l'ai utilisée dans mes derniers projets.
Votre meilleur pari est d’utiliser Selenium Web Driver car il
Lent. Ne frappe pas les pages Web comme HtmlUnit, mais parfois vous ne voulez pas frapper trop vite.
Htmlunit est rapide mais horrible à manipuler Javascript et AJAX.
HTMLUnit peut être utilisé pour faire du scraping Web, il prend en charge l’appel de pages, le remplissage et la soumission de formulaires. Je l'ai utilisé dans mon projet. C’est bien Java pour le scraping Web. lisez ici pour plus d’informations
Il existe également Jaunt Java Web Scraping & JSON Querying - http://jaunt-api.com
mécaniser pour Java serait un bon choix pour cela, et comme Wadjy Essam l'a mentionné, il utilise JSoup pour HMLT. mécanize est un client HTTP/HTML complexe qui prend en charge la navigation, les soumissions de formulaire et le grattage de page. .
http://gistlabs.com/software/mechanize-for-Java/ (et le GitHub ici https://github.com/GistLabs/mechanize )
Regardez un analyseur HTML tel que TagSoup, HTMLCleaner ou NekoHTML.
Vous pourriez regarder dans jwht-scrapper !
Il s'agit d'un framework de déchirage complet qui présente toutes les fonctionnalités qu'un développeur peut attendre d'un scrapper Web:
Cela fonctionne avec (jwht-htmltopojo) [ https://github.com/whimtrip/jwht-htmltopojo ) lib qui itsef utilise Jsoup mentionné par plusieurs autres personnes ici.
Ensemble, ils vous aideront à construire d’impressionnants scrappers mappant directement du HTML vers des POJO et contournant tous les problèmes de déchirage classiques en quelques minutes seulement!
J'espère que cela pourrait aider certaines personnes ici!
Disclaimer, c'est moi qui l'ai développé, n'hésitez pas à me faire part de vos remarques!
Si vous souhaitez automatiser le raclage de pages ou de données volumineuses, vous pouvez essayer Gotz ETL .
Il est complètement dirigé par le modèle comme un véritable outil ETL. La structure des données, le flux de travail des tâches et les pages à supprimer sont définis à l'aide d'un ensemble de fichiers de définition XML. Aucun codage n'est requis. Les requêtes peuvent être écrites en utilisant les sélecteurs avec JSoup ou XPath avec HtmlUnit.
À l'aide de Web Scraper, vous pouvez extraire le contenu utile de la page Web et le convertir dans n'importe quel format, selon le cas.
WebScrap ws= new WebScrap();
//set your extracted website url
ws.setUrl("http://dasnicdev.github.io/webscrap4j/");
//start scrap session
ws.startWebScrap();
Maintenant, votre session de démolition Web démarre et est prête à supprimer ou à extraire des données dans Java en utilisant bibliothèque webscrap4j.
Pour Titre:
System.out.println("-------------------Title-----------------------------");
System.out.println(ws.getSingleHTMLTagData("title"));
Pour le slogan:
System.out.println("-------------------Tagline-----------------------------");
System.out.println(ws.getSingleHTMLScriptData("<h2 id='project_tagline'>", "</h2>"));
Pour toutes les balises d'ancrage:
System.out.println("-------------------All anchor tag-----------------------------");
al=ws.getImageTagData("a", "href");
for(String adata: al)
{
System.out.println(adata);
}
Pour les données d'image:
System.out.println("-------------------Image data-----------------------------");
System.out.println(ws.getImageTagData("img", "src"));
System.out.println(ws.getImageTagData("img", "alt"));
Pour les données Ul-Li:
System.out.println("-------------------Ul-Li Data-----------------------------");
al=ws.getSingleHTMLScriptData("<ul>", "</ul>","<li>","</li>");
for(String str:al)
{
System.out.println(str);
}
Pour le code source complet, vérifiez ceci tutoriel.