Quel analyseur HTML est le meilleur? [fermé]

194

Je code beaucoup d'analyseurs. Jusqu'à présent, j'utilisais le navigateur sans tête HtmlUnit pour l'analyse et l'automatisation du navigateur.

Maintenant, je veux séparer les deux tâches.

Comme 80% de mon travail implique uniquement l'analyse, je veux utiliser un analyseur HTML léger car il faut beaucoup de temps dans HtmlUnit pour charger d'abord une page, puis obtenir la source et ensuite l'analyser.

Je veux savoir quel analyseur HTML est le meilleur. L'analyseur serait mieux s'il est proche de l'analyseur HtmlUnit.


ÉDITER:

Au mieux, je veux au moins les fonctionnalités suivantes:

  1. La vitesse
  2. Facilité pour localiser n'importe quel HtmlElement par son "id" ou "nom" ou "type de balise".

Ce serait bien pour moi s'il ne nettoie pas le code HTML sale. Je n'ai pas besoin de nettoyer de source HTML. J'ai juste besoin d'un moyen le plus simple pour parcourir les HtmlElements et en récolter les données.

Yatendra Goel
la source
2
Comment voulez-vous dire "meilleur"? Voulez-vous dire la vitesse, la facilité de transition de l'implémentation actuelle, le respect des normes W3C, quelque chose d'autre auquel je n'ai pas pensé? Votre question implique de la vitesse, mais elle implique également un temps de transition de développement. Certaines clarifications peuvent aider les autres à recommander de bons analyseurs qui correspondent mieux à vos besoins.
aperkins
2
Votre déclaration «je code beaucoup d'analyseurs» ne semble pas correspondre à la question. Voulez-vous dire "J'ai besoin d'utiliser beaucoup d'analyseurs HTML?"
vierge
11
Je pense que cette question est suffisamment précise pour être exemptée de la raison proche "non constructive".
Bill the Lizard
9
Votez pour le rouvrir s'il vous plait. Ceci est suffisamment précis et ne doit pas être fermé.
AZ_
3
Oui, certaines personnes sur SO mènent une guerre sainte contre les guerres saintes des "meilleures questions". Si ennuyant. La réponse au vote indique clairement l'utilité de cette question.
user1050755

Réponses:

396

Self plug: je viens de sortir un nouvel analyseur HTML Java: jsoup . Je le mentionne ici parce que je pense qu'il fera ce que vous recherchez.

Son astuce de fête est une syntaxe de sélecteur CSS pour trouver des éléments, par exemple:

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

Voir le javadoc du sélecteur pour plus d'informations.

Il s'agit d'un nouveau projet, toutes les idées d'amélioration sont donc les bienvenues!

Jonathan Hedley
la source
15
Cette chose est fantastique et j'adore le support du sélecteur CSS. Je sais à peine que j'utilise une bibliothèque Java. :-)
William Pietri
17
Veuillez ne pas arrêter de soutenir cela. C'est exactement ce dont nous avions besoin pour analyser HTML en utilisant Java côté serveur! C'est génial! J'ai construit un proxy en seulement quelques heures qui modifie tous les liens src et href pour en faire des chemins complets vers le serveur d'origine.
jmort253
7
Je viens d'y jeter un coup d'œil. J'aime son interface et sa documentation. C'est facile à comprendre. :)
emeraldhieu
5
Bon travail! Jsoup a été opérationnel en moins de 10 minutes.
Indrek Kõue
10
Incroyable, c'est tellement malade. J'ai pu traiter une page HTML en quelques minutes. MERCI BEAUCOUP POUR CE GRAND TRAVAIL.
Michael-O
32

Le meilleur que j'ai vu jusqu'à présent est HtmlCleaner :

HtmlCleaner est un analyseur HTML open-source écrit en Java. Le HTML trouvé sur le Web est généralement sale, mal formé et ne convient pas pour un traitement ultérieur. Pour toute consommation sérieuse de tels documents, il est nécessaire de nettoyer d'abord le gâchis et de ramener l'ordre aux balises, attributs et texte ordinaire. Pour le document HTML donné, HtmlCleaner réorganise les éléments individuels et produit du XML bien formé. Par défaut, il suit des règles similaires que la plupart des navigateurs Web utilisent pour créer un modèle d'objet de document. Cependant, l'utilisateur peut fournir une balise personnalisée et un ensemble de règles pour le filtrage et l'équilibrage des balises.

Avec HtmlCleaner, vous pouvez localiser n'importe quel élément à l'aide de XPath.

Pour les autres analyseurs html, voir cette question SO .

tangens
la source
1
Vous devez gérer le proxy vous-même, puis utiliser HtmlCleaner pour traiter votre flux à la place. => Ce n'est pas pratique. T__T
kidnan1991
HTMLTidy ne serait-il pas une meilleure option ici? html-tidy.org
Troy Witthoeft
1
Similar rules that the most of web browsers use- Ce n'est pas très convaincant
pguardiario