web-dev-qa-db-fra.com

Jsoup comme analyseur HTML pour C++

J'ai écrit des codes pour obtenir des données de certaines pages en Java et Jsoup était l'une des meilleures bibliothèques avec lesquelles travailler. Mais, malheureusement, je dois porter tout le code en C/C++. Mais je ne peux pas trouver d’analyseur HTML décent à utiliser sur c ++. Existe-t-il une bibliothèque semblable à Jsoup pour C++ ou comment obtenir des résultats similaires?

[Actuellement, j'utilise Curl pour obtenir la source des pages et navigue sur Internet pour trouver un analyseur HTML.]

15
Writwick

Malheureusement, je suppose qu'il n'y a pas d'analyseur comme Jsoup pour C++ ...

Outre les bibliothèques déjà mentionnées ici, vous trouverez un bon aperçu de l’analyseur syntaxique C++ (certains C également): Bibliothèques d’analyseurs XML libres C ou C++

Pour l'analyse, j'ai utilisé TinyXML-2 pour l'analyse (Html-) DOM; c'est une très petite bibliothèque (seulement 2 fichiers) qui fonctionne sur la plupart des systèmes d'exploitation (même non-desktop).

LibXml

  • Analyseur Push et Pull (DOM, SAX)
  • Validation
  • Prise en charge de XPath et XPointer
  • Cross-Plateforme/bonne documentation

Apache Xerxces

  • Analyseur Push et Pull (DOM, SAX)
  • Validation
  • Pas de support XPath (mais un paquet pour cela?)
  • Cross-Plateforme/bonne documentation

Si vous êtes sur C++ CLI, recherchez NSoup - un port Jsoup pour .NET.

Un peu plus:

Peut-être pouvez-vous combiner un modèle/analyseur DOM et un sélecteur CSS?

11
ollo

Si vous connaissez Qt Framework, le moyen le plus pratique consiste à utiliser QWebElement (Référence ici ).

Autrement (comme le suggère un autre article), utiliser Tidy pour convertir HTML en XML valide, puis utiliser un analyseur XML tel que libxml ++ est une bonne option. Vous pouvez trouver un exemple de code montrant ces deux étapes ici .

8
sgun

Le chrome a un open source analyseur . En outre, le Google gumbo-analyseur a l'air cool.

5
bowlofstew

Oui, il existe un analyseur syntaxique HTML pour le c ++, consultez-le https://github.com/HamedMasafi/HtmlParser/

Cette bibliothèque peut analyser html ou css et la convertir en modèle d'arborescence. Vous pouvez effectuer une recherche dans le langage HTML analysé à l'aide de méthodes telles que: get_by_id, get_by_class_name, get_by_tag_name et une méthode de question que vous pouvez rechercher via le sélecteur css (uniquement les sélecteurs de balises imbriquées, id, classes et imbriquées actuellement pris en charge).

Après avoir trouvé un enfant, vous pouvez changer ses attributs et, en final, vous pouvez imprimer un fichier HTML dans std :: string en mode compact et joli.

1
Hamed Masafi

Vous pouvez utiliser xerces2 comme analyseur DOM.

Ou utilisez HTML Tidy pour nettoyer le code HTML et le convertir en XHTML, puis analysez le code XML avec pugixml ou un analyseur XML similaire. Et puisque pugixml est un analyseur syntaxique non validant, il pourrait tout aussi bien fonctionner sur le code HTML brut sans qu'il soit nécessaire de lancer HTML Tidy au préalable.

1
huysentruitw

Si cela ne vous dérange pas d'appeler Python à partir de C++, vous pouvez utiliser Beautiful Soup . Au moins le nom est juste!

Sérieusement - c'est un analyseur HTML agréable et pratique. Je n'ai pas essayé de l'appeler depuis C++, bien que devrait soit simple.

1
Graham Griffiths