Scrapy - Conseils Xpath
Utilisation de nœuds de texte dans une condition
Lorsque vous utilisez des nœuds de texte dans une fonction de chaîne XPath, utilisez .(dot) à la place d'utiliser .//text(), car cela produit la collection d'éléments de texte appelée node-set.
Par exemple -
from scrapy import Selector
val = Selector(text = '<a href = "#">More Info<strong>click here</strong></a>')
Si vous convertissez un ensemble de nœuds en chaîne, utilisez le format suivant -
>>val.xpath('//a//text()').extract()
Il affichera l'élément comme -
[u'More Info',u'click here']
et
>>val.xpath("string('//a[1]//text())").extract()
Il en résulte l'élément comme -
[u'More Info']
Différence entre // node [1] et (// node) [1]
le //node[1]affiche tous les premiers éléments définis sous les parents respectifs. le(//node)[1] affiche uniquement le premier élément du document.
Par exemple -
from scrapy import Selector
val = Selector(text = """
<ul class = "list">
<li>one</li>
<li>one</li>
<li>one</li>
</ul>
<ul class = "list">
<li>four</li>
<li>five</li>
<li>six</li>
</ul>""")
res = lambda x: val.xpath(x).extract()
La ligne suivante affiche tous les premiers li éléments définis sous leurs parents respectifs -
>>res("//li[1]")
Il affichera le résultat comme -
[u'<li>one</li>', u'<li>four</li>']
Vous pouvez obtenir le premier li élément du document complet présenté comme suit -
>>res("(//li)[1]")
Il affichera le résultat comme -
[u'<li>one</li>']
Vous pouvez également afficher tous les premiers li éléments définis sous ul parent -
>>res("//ul//li[1]")
Il affichera le résultat comme -
[u'<li>one</li>', u'<li>four</li>']
Vous pouvez obtenir le premier li élément défini sous ul parent dans l'ensemble du document comme suit -
>>res("(//ul//li)[1]")
Il affichera le résultat comme -
[u'<li>one</li>']
Référence des sélecteurs intégrés
Les sélecteurs intégrés incluent la classe suivante -
class scrapy.selector.Selector(response = None, text = None, type = None)
La classe ci-dessus contient les paramètres suivants -
response - C'est un HTMLResponse et XMLResponse qui sélectionne et extrait les données.
text - Il encode tous les caractères en utilisant le codage de caractères UTF-8, lorsqu'il n'y a pas de réponse disponible.
type- Il spécifie les différents types de sélecteurs, tels que html pour HTML Response, xml pour le type XMLResponse et aucun pour le type par défaut. Il sélectionne le type en fonction du type de réponse ou définit le html par défaut, s'il est utilisé avec le texte.
Les sélecteurs intégrés contiennent les méthodes suivantes -
Sr.Non | Méthode et description |
---|---|
1 | xpath(query) Il fait correspondre les nœuds en fonction de la requête xpath et fournit les résultats sous forme d'instance SelectorList. La requête de paramètre spécifie la requête XPATH à utiliser. |
2 | css(query) Il fournit le sélecteur CSS et renvoie l'instance SelectorList. La requête de paramètre spécifie le sélecteur CSS à utiliser. |
3 | extract() Il fait ressortir tous les nœuds correspondants sous forme de liste de chaînes Unicode. |
4 | re(regex) Il fournit l'expression régulière et fait apparaître les nœuds correspondants sous la forme d'une liste de chaînes Unicode. Le paramètre regex peut être utilisé comme une expression régulière ou une chaîne, qui se compile en expression régulière à l'aide de la méthode re.compile (regex). |
5 | register_namespace(prefix, uri) Il spécifie l'espace de noms utilisé dans le sélecteur. Vous ne pouvez pas extraire les données sans enregistrer l'espace de noms à partir de l'espace de noms non standard. |
6 | remove_namespaces() Il supprime l'espace de noms et donne la permission de parcourir le document en utilisant les xpaths sans espace de noms. |
sept | __nonzero__() Si le contenu est sélectionné, cette méthode renvoie true, sinon renvoie false. |
Objets SelectorList
class scrapy.selector.SelectorList
Les objets SelectorList contiennent les méthodes suivantes -
Sr.Non | Méthode et description |
---|---|
1 | xpath(query) Il utilise la méthode .xpath () pour les éléments et fournit les résultats sous forme d'instance SelectorList. La requête de paramètre spécifie les arguments définis dans la méthode Selector.xpath (). |
2 | css(query) Il utilise la méthode .css () pour les éléments et renvoie les résultats sous forme d'occurrence SelectorList. La requête de paramètre spécifie les arguments définis dans la méthode Selector.css (). |
3 | extract() Il fait ressortir tous les éléments de la liste à l'aide de la méthode .extract () et renvoie le résultat sous la forme d'une liste de chaînes unicode. |
4 | re() Il utilise la méthode .re () pour les éléments et fait ressortir les éléments sous forme de liste de chaînes unicode. |
5 | __nonzero__() Si la liste n'est pas vide, cette méthode renvoie true, sinon renvoie false. |
Les objets SelectorList contiennent certains des concepts décrits dans ce lien .