grattant

Scrapy avec les sélecteurs XPath

Scrapy avec les sélecteurs XPath
HTML est la langue des pages Web, et il y a beaucoup d'informations entre l'ouverture et la fermeture de chaque page Web html étiqueter. Il existe de nombreuses façons d'y accéder, mais dans cet article, nous le ferions en utilisant le sélecteur Xpath via la bibliothèque Scrapy de Python.

La bibliothèque Scrapy est une bibliothèque de grattage Web très puissante, facile à utiliser également. Si vous êtes nouveau dans ce domaine, vous pouvez suivre le didacticiel disponible sur l'utilisation de la bibliothèque Scrapy.

Ce tutoriel couvre l'utilisation des sélecteurs Xpath. Xpath utilise une syntaxe de type chemin pour naviguer dans les nœuds des documents XML. Ils sont également utiles pour naviguer dans les balises HTML.

Contrairement au didacticiel Scrapy, nous allons effectuer toutes nos opérations ici sur le terminal par souci de simplicité. Cela ne signifie pas que le Xpath ne peut pas être utilisé avec le programme Scrapy approprié, ils peuvent être utilisés dans la bibliothèque d'analyse sur le paramètre de réponse.

Nous allons travailler avec l'exemple.grattage web.com, car il est très simple et aiderait à comprendre les concepts.

Pour utiliser scrapy dans notre terminal, tapez la commande ci-dessous :

$ shell scrapy http://exemple.grattage web.com

Il visiterait le site et obtiendrait les informations nécessaires, puis nous laisserait un shell interactif avec lequel travailler. Vous devriez voir une invite comme :

En 1]:

À partir de la session interactive, nous allons travailler avec le réponse objet.

Voici à quoi ressemblerait notre syntaxe pour la majorité de cet article :

Dans [1] : réponse.xpath('xpathsyntaxe').extrait()

Cette commande ci-dessus est utilisée pour extraire toutes les balises correspondantes selon la syntaxe Xpath puis les stocke dans une liste.

Dans [2] : réponse.xpath('xpathsyntaxe').extract_first()

Cette commande ci-dessus est utilisée pour extraire uniquement la première balise correspondante et la stocke dans une liste.
Nous pouvons maintenant commencer à travailler sur la syntaxe Xpath.

ÉTIQUETTES DE NAVIGATION

La navigation dans les balises dans Xpath est très simple, il suffit de la barre oblique "/" suivie du nom de la balise.

Dans [3] : réponse.xpath('/html').extrait()

La commande ci-dessus renverrait le html tag et tout ce qu'il contient en tant qu'élément unique dans une liste.

Si nous voulons obtenir le corps de la page Web, nous utiliserons les éléments suivants :

Dans [4] : réponse.xpath('/html/corps').extrait()

Xpath autorise également le caractère générique « * », qui correspond à tout dans le niveau dans lequel il est utilisé.

Dans [5] : réponse.xpath('/*').extrait()

Le code ci-dessus correspondrait à tout dans le document. La même chose se produit lorsque nous utilisons '/html'.

Dans [6] : réponse.xpath('/html/*').extrait()

Outre la navigation dans les balises, nous pouvons obtenir toutes les balises descendantes d'une balise particulière en utilisant le "//".

Dans [7] : réponse.xpath('/html//a').extrait()

Le code ci-dessus renverrait toutes les balises d'ancrage sous dans la balise html i.e. il renverrait une liste de toutes les balises d'ancrage descendantes.

ÉTIQUETTES PAR ATTRIBUTS ET LEURS VALEURS

Parfois, la navigation dans les balises html pour accéder à la balise requise peut poser problème. Ce problème peut être évité en trouvant simplement la balise nécessaire par son attribut.

Dans [8] : réponse.xpath('/html//div[@id = "pagination"]').extrait()

Le code ci-dessus renvoie tous les div balises sous le html étiquette qui a le identifiant attribut avec une valeur de pagination.

Dans [9] : réponse.xpath('/html//div[@class = "span12"]').extrait()

Le code ci-dessus renverrait une liste de tous les div balises sous la balise html, uniquement si elles ont l'attribut class avec une valeur de span12.

Que faire si vous ne connaissez pas la valeur de l'attribut? Et tout ce que vous voulez, c'est obtenir des balises avec un attribut particulier, sans vous soucier de sa valeur. Faire cela est également simple, tout ce que vous avez à faire est d'utiliser uniquement le symbole @ et l'attribut.

Dans [10] : réponse.xpath('/html//div[@class]').extrait()

Ce code renverrait une liste de toutes les balises div qui contiennent l'attribut de classe, quelle que soit la valeur de cet attribut de classe.

Que diriez-vous si vous ne connaissez que quelques caractères contenus dans la valeur d'un attribut? Il est également possible d'obtenir ce type de balises.

Dans [11] : réponse.xpath('/html//div[contient(@id, "ion")]').extrait()

Le code ci-dessus renverrait toutes les balises div sous la balise html qui ont l'attribut id, mais nous ne savons pas quelle valeur l'attribut détient, sauf que nous savons qu'il contient "ion".

La page que nous analysons n'a qu'une seule balise dans cette catégorie, et la valeur est « pagination » donc elle serait renvoyée.

Cool à droite?

ÉTIQUETTES PAR LEUR TEXTE

N'oubliez pas que nous avons fait correspondre les balises par leurs attributs plus tôt. Nous pouvons également faire correspondre les balises par leur texte.

Dans [12] : réponse.xpath('/html//a[.=" Algérie"]').extrait()

Le code ci-dessus nous aiderait à obtenir toutes les balises d'ancrage contenant le texte « Algérie ». NB : Il doit s'agir de balises avec exactement ce contenu textuel.

Formidable.

Que diriez-vous si nous ne connaissons pas le contenu du texte exact, et nous ne connaissons que quelques-uns du contenu du texte? On peut faire ça aussi.

Dans [13] : réponse.xpath('/html//a[contient (text(),"A")]').extrait()

Le code ci-dessus obtiendrait les balises qui ont la lettre "A" dans leur contenu textuel.

EXTRAIT DU CONTENU DES ÉTIQUETTES

Depuis le début, nous avons parlé de trouver les bons tags. Il est temps d'extraire le contenu du tag quand on le trouve.

C'est assez simple. Tout ce que nous avons à faire est d'ajouter "/text()" à la syntaxe, et le contenu de la balise sera extrait.

Dans [14] : réponse.xpath('/html//a/text()').extrait()

Le code ci-dessus obtiendrait toutes les balises d'ancrage dans le document html, puis extrairait le contenu du texte.

EXTRACTION DES LIENS

Maintenant que nous savons extraire le texte dans les balises, alors nous devrions savoir extraire les valeurs des attributs. La plupart du temps, les valeurs des attributs qui sont de la plus haute importance pour nous sont des liens.

Faire cela revient presque à extraire les valeurs de texte, mais au lieu d'utiliser "/text()", nous utiliserions le symbole "/@" et le nom de l'attribut.

Dans [15] : réponse.xchemin('/html//a/@href').extrait()

Le code ci-dessus extraira tous les liens dans les balises d'ancrage, les liens sont censés être les valeurs du href attribut.

NAVIGUER DANS LES ÉTIQUETTES DES SURS

Si vous l'avez remarqué, nous avons parcouru les balises pendant tout ce temps. Cependant, il y a une situation que nous n'avons pas abordée.

Comment sélectionnons-nous une balise particulière lorsque les balises portant le même nom sont au même niveau?




Afghanistan




Iles Aland


Dans un cas comme celui que nous avons ci-dessus, si nous devons l'examiner, nous pourrions dire que nous utiliserions extract_first() obtenir le premier match.

Cependant, que se passe-t-il si nous voulons faire correspondre le second? Et s'il y a plus de dix options et que nous voulons la cinquième? On va y répondre tout de suite.

Voici la solution : lorsque nous écrivons notre syntaxe Xpath, nous mettons la position de la balise que nous voulons entre crochets, tout comme nous indexons mais l'index commence à 1.

En regardant le html de la page Web dont nous traitons, vous remarquerez qu'il y a beaucoup de balises au même niveau. Pour obtenir le troisième tag, nous utiliserions le code suivant :

Dans [16] : réponse.xpath('/html//tr[3]').extrait()

Vous remarquerez également que le les balises sont par deux, si on veut seulement la seconde balises de la lignes, nous ferions ce qui suit :

Dans [17] : réponse.xpath('/html//td[2]').extrait()

CONCLUSION:

Xpath est un moyen très puissant d'analyser des fichiers html et pourrait aider à minimiser l'utilisation d'expressions régulières dans leur analyse étant donné qu'il a le contient fonction dans sa syntaxe.

Il existe d'autres bibliothèques qui permettent l'analyse avec Xpath telles que Selenium pour l'automatisation Web. Xpath nous donne beaucoup d'options lors de l'analyse html, mais ce qui a été traité dans cet article devrait pouvoir vous guider à travers les opérations d'analyse html courantes.

Émulez les clics de souris en survolant à l'aide de la souris sans clic dans Windows 10
L'utilisation d'une souris ou d'un clavier dans la mauvaise posture d'une utilisation excessive peut entraîner de nombreux problèmes de santé, notamme...
Ajoutez des gestes de souris à Windows 10 à l'aide de ces outils gratuits
Ces dernières années, les ordinateurs et les systèmes d'exploitation ont considérablement évolué. Il fut un temps où les utilisateurs devaient utilise...
Contrôlez et gérez le mouvement de la souris entre plusieurs moniteurs dans Windows 10
Gestionnaire de souris à double affichage vous permet de contrôler et de configurer le mouvement de la souris entre plusieurs moniteurs, en ralentissa...