Python

Comment analyser et gratter du HTML à l'aide de Pyquery

Comment analyser et gratter du HTML à l'aide de Pyquery
"Pyquery" est un module Python tiers qui vous permet d'analyser et d'extraire des données de documents "xml" et "html". Il est inspiré de la bibliothèque JavaScript jQuery et présente une syntaxe presque identique, vous permettant d'utiliser de nombreuses fonctions d'assistance et du code abrégé pour analyser et manipuler l'arborescence du document. Cet article couvrira un guide simple sur Pyquery qui vous aidera à démarrer avec le module.

Installation de Pyquery

Pour installer Pyquery dans Ubuntu, utilisez la commande spécifiée ci-dessous :

$ sudo apt installer python3-pyquery

Vous pouvez également installer la dernière version de Pyquery à partir du gestionnaire de packages « pip » en exécutant successivement les deux commandes suivantes :

$ sudo apt installer python3-pip
$ pip3 installer pyquery

Pour installer Pyquery dans d'autres distributions Linux, installez "pip3" à partir du gestionnaire de packages et exécutez la deuxième commande mentionnée ci-dessus.

Création d'une arborescence de documents analysables

Avant de pouvoir analyser et extraire des données d'un document HTML, vous devez créer une arborescence de documents. Vous pouvez créer une arborescence de documents à partir d'un simple balisage HTML en utilisant l'exemple de code ci-dessous :

de pyquery importer PyQuery en tant que pq
document = pq("Bonjour tout le monde !!")
imprimer (document)
imprimer (tapez (document))

La première instruction importe la classe "PyQuery" du module "pyquery". Ensuite, une nouvelle instance de la classe PyQuery est créée. Après avoir exécuté l'exemple de code ci-dessus, vous devriez obtenir le résultat suivant :

Bonjour le monde !!

Notez la deuxième ligne dans la sortie. Ici "document", qui est une instance de la classe "PyQuery", ne retourne pas un objet de type chaîne. Vous pouvez rapidement interroger toutes les méthodes disponibles pour l'instance « document » en ajoutant la ligne supplémentaire suivante à l'exemple de code ci-dessus :

de pyquery importer PyQuery en tant que pq
document = pq("Bonjour le monde !!")
imprimer (aide(document))

Vous pouvez également parcourir l'API pour la classe PyQuery en ligne.

Pour créer une arborescence de documents à partir d'une URL, utilisez plutôt le code suivant (remplacez « url » par votre propre adresse souhaitée) :

de pyquery importer PyQuery en tant que pq
document = pq(url='https://exemple.com')
imprimer (document)

Pour créer une arborescence de documents à partir d'un fichier HTML local, utilisez le code ci-dessous (remplacez la valeur de « filename » selon vos besoins) :

de pyquery importer PyQuery en tant que pq
document = pq(nom_fichier='index.html')
imprimer (document)

Maintenant que vous avez une arborescence de documents, vous pouvez commencer à l'analyser.

Manipulation de l'arborescence du document

Vous pouvez extraire des données et manipuler des arborescences de documents à l'aide de diverses méthodes. Certaines des méthodes les plus courantes sont énumérées ci-dessous avec des exemples. Pour toutes les méthodes utilisables, reportez-vous à l'API disponible ici.

Vous pouvez utiliser la méthode "text" pour obtenir le contenu textuel d'un élément :

de pyquery importer PyQuery en tant que pq
document = pq("

Bonjour le monde !!

")
p = document('p')
imprimer (p.texte())

Vous pouvez choisir une balise / élément spécifique en fournissant son nom en argument à l'instance "document". Après avoir exécuté l'exemple de code ci-dessus, vous devriez obtenir le résultat suivant :

Bonjour le monde !!

Vous pouvez obtenir les attributs d'une balise en utilisant la méthode "attr". Pour ce faire, choisissez une balise que vous souhaitez analyser ("p" dans ce cas) et fournissez le nom de l'attribut en tant qu'argument ("id" dans ce cas) ou utilisez la notation par points.

de pyquery importer PyQuery en tant que pq
document = pq("

Bonjour le monde !!

")
p = document('p')
imprimer (document)
imprimer (p.attr("id"), p.attr.identifiant)

Après avoir exécuté l'exemple de code ci-dessus, vous devriez obtenir le résultat suivant :

Bonjour le monde !!

Vous pouvez manipuler CSS en utilisant la méthode "css". Pour ajouter des styles CSS à

ou toute autre balise, vous pouvez utiliser le code suivant :

de pyquery importer PyQuery en tant que pq
document = pq("

Bonjour le monde !!

")
p = document('p')
p.css("couleur": "rouge")
imprimer (document)
imprimer (p.attr("style"))

Remplacez la partie ""couleur": "rouge"" par vos propres styles personnalisés. Après avoir exécuté l'exemple de code ci-dessus, vous devriez obtenir la sortie suivante et vérifier que CSS a été correctement appliqué :

Bonjour le monde !!


La couleur rouge

Si vous avez une classe pré-stylée, vous pouvez simplement utiliser la méthode "addClass" pour appliquer les styles existants.

de pyquery importer PyQuery en tant que pq
document = pq("

Bonjour le monde !!

")
p = document('p')
p.addClass("monstyle")

Vous pouvez ajouter et précéder votre propre balisage personnalisé à l'aide de l'exemple de code ci-dessous :

de pyquery importer PyQuery en tant que pq
document = pq("

Bonjour le monde !!

")
p = document('p')
p.préfixer("

salut

")
p.ajouter("

Au revoir

")
imprimer (document)

Remplacez les arguments des méthodes "prepend" et "append" par vos propres valeurs. Après avoir exécuté l'exemple de code ci-dessus, vous devriez obtenir le résultat suivant :

salut

Bonjour le monde !!

Au revoir

Pour supprimer le contenu d'un élément, utilisez la méthode "vide".

de pyquery importer PyQuery en tant que pq
document = pq("

Bonjour le monde !!

")
p = document('p')
p.vider()
imprimer (document)

Après avoir exécuté l'exemple de code ci-dessus, vous devriez obtenir le résultat suivant :

Vous pouvez utiliser la méthode "filtre" pour sélectionner des éléments spécifiques lorsqu'il y a plusieurs balises du même type. Par exemple, le code ci-dessous récupère un "

" balise ayant un " id " comme " bonjour " :

de pyquery importer PyQuery en tant que pq
document = pq("

Bonjour

Monde !!

")
p = document('p')
imprimer (p.filtre("#bonjour"))

Après avoir exécuté l'exemple de code ci-dessus, vous devriez obtenir le résultat suivant :

Bonjour

Vous pouvez trouver plusieurs balises / éléments à la fois en utilisant la méthode « rechercher » :

de pyquery importer PyQuery en tant que pq
document = pq("

Bonjour

Monde !!

")
imprimer (document.trouver('p'))

Fournissez le nom de la balise / de l'élément en argument à la méthode "find". Après avoir exécuté l'exemple de code ci-dessus, vous devriez obtenir le résultat suivant :

Bonjour

Monde !!

Vous pouvez basculer entre les parseurs « xml » et « html » en utilisant un argument « parser » supplémentaire :

de pyquery importer PyQuery en tant que pq
document = pq("

Bonjour

Monde !!

", parseur="html")
imprimer (document)

Si vous avez besoin d'aide supplémentaire avec Pyquery, reportez-vous à sa documentation officielle et aux exemples disponibles ici.

Conclusion

PyQuery vous permet d'analyser rapidement des documents html en écrivant un code minimum, car il inclut de nombreuses fonctions d'assistance qui omettent complètement le besoin d'écrire du code personnalisé. Sa syntaxe et sa structure "jQuery" aident également à sélectionner des éléments et des nœuds sans aller plus loin dans l'arborescence du document, en particulier lorsqu'il y a beaucoup de balisage imbriqué.

WinMouse vous permet de personnaliser et d'améliorer le mouvement du pointeur de la souris sur un PC Windows
Si vous souhaitez améliorer les fonctions par défaut de votre pointeur de souris, utilisez un logiciel gratuit WinMouse. Il ajoute plus de fonctionnal...
Le bouton de clic gauche de la souris ne fonctionne pas sous Windows 10
Si vous utilisez une souris dédiée avec votre ordinateur portable ou de bureau mais que le le clic gauche de la souris ne fonctionne pas sur Windows 1...
Le curseur saute ou se déplace de manière aléatoire lors de la saisie dans Windows 10
Si vous constatez que le curseur de votre souris saute ou se déplace tout seul, automatiquement, au hasard lors de la saisie sur un ordinateur portabl...