web-dev-qa-db-fra.com

Web scraping avec Java

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?

70
NoneType

jsoup

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.

91
Wajdy Essam

Votre meilleur pari est d’utiliser Selenium Web Driver car il

  1. Fournit un retour visuel au codeur (voyez votre action en cours, voyez où elle s'arrête)
  2. Précis et cohérent car il contrôle directement le navigateur que vous utilisez.
  3. 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.

20
KJW

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

13
Beschi

Il existe également Jaunt Java Web Scraping & JSON Querying - http://jaunt-api.com

4
Slavus

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 )

4
user1374041

Regardez un analyseur HTML tel que TagSoup, HTMLCleaner ou NekoHTML.

2
Mikos

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!

2
Louis-Wht

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.

1
Maithilish

À 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.

1
Tell Me How