Scrapy - Suggerimenti Xpath
Utilizzo di nodi di testo in una condizione
Quando si utilizzano nodi di testo in una funzione stringa XPath, utilizzare .(dot) invece di usare .//text(), perché questo produce la raccolta di elementi di testo chiamata come node-set.
Ad esempio:
from scrapy import Selector
val = Selector(text = '<a href = "#">More Info<strong>click here</strong></a>')
Se stai convertendo un set di nodi in una stringa, utilizza il seguente formato:
>>val.xpath('//a//text()').extract()
Mostrerà l'elemento come -
[u'More Info',u'click here']
e
>>val.xpath("string('//a[1]//text())").extract()
Risulta l'elemento come -
[u'More Info']
Differenza tra // nodo [1] e (// nodo) [1]
Il //node[1]mostra tutti i primi elementi definiti sotto i rispettivi genitori. Il(//node)[1] mostra solo il primo elemento del documento.
Ad esempio:
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 riga seguente mostra tutte le prime li elementi definiti sotto i rispettivi genitori -
>>res("//li[1]")
Visualizzerà il risultato come:
[u'<li>one</li>', u'<li>four</li>']
Puoi ottenere il primo li elemento del documento completo mostrato come segue -
>>res("(//li)[1]")
Visualizzerà il risultato come:
[u'<li>one</li>']
Puoi anche visualizzare tutti i primi li elementi definiti in ul genitore -
>>res("//ul//li[1]")
Visualizzerà il risultato come:
[u'<li>one</li>', u'<li>four</li>']
Puoi ottenere il primo li elemento definito in ul genitore nell'intero documento mostrato come segue -
>>res("(//ul//li)[1]")
Visualizzerà il risultato come:
[u'<li>one</li>']
Riferimento ai selettori incorporati
I selettori incorporati includono la seguente classe:
class scrapy.selector.Selector(response = None, text = None, type = None)
La classe precedente contiene i seguenti parametri:
response - È una risposta HTML e una risposta XML che seleziona ed estrae i dati.
text - Codifica tutti i caratteri utilizzando la codifica dei caratteri UTF-8, quando non è disponibile una risposta.
type- Specifica i diversi tipi di selettore, come html per HTML Response, xml per XMLResponse tipo e nessuno per il tipo predefinito. Seleziona il tipo a seconda del tipo di risposta o imposta su html per impostazione predefinita, se viene utilizzato con il testo.
I selettori incorporati contengono i seguenti metodi:
Suor n | Metodo e descrizione |
---|---|
1 | xpath(query) Corrisponde ai nodi in base alla query xpath e fornisce i risultati come istanza di SelectorList. La query con parametri specifica la query XPATH da utilizzare. |
2 | css(query) Fornisce il selettore CSS e restituisce l'istanza SelectorList. La query del parametro specifica il selettore CSS da utilizzare. |
3 | extract() Mostra tutti i nodi corrispondenti come un elenco di stringhe Unicode. |
4 | re(regex) Fornisce l'espressione regolare e fa emergere i nodi corrispondenti come un elenco di stringhe Unicode. Il parametro regex può essere utilizzato come un'espressione regolare o una stringa, che viene compilata in un'espressione regolare utilizzando il metodo re.compile (regex). |
5 | register_namespace(prefix, uri) Specifica lo spazio dei nomi utilizzato nel selettore. Non è possibile estrarre i dati senza registrare lo spazio dei nomi dallo spazio dei nomi non standard. |
6 | remove_namespaces() Elimina lo spazio dei nomi e dà il permesso di attraversare il documento usando gli xpaths senza spazio dei nomi. |
7 | __nonzero__() Se il contenuto è selezionato, questo metodo restituisce true, altrimenti restituisce false. |
Oggetti SelectorList
class scrapy.selector.SelectorList
Gli oggetti SelectorList contengono i seguenti metodi:
Suor n | Metodo e descrizione |
---|---|
1 | xpath(query) Utilizza il metodo .xpath () per gli elementi e fornisce i risultati come istanza di SelectorList. La query con i parametri specifica gli argomenti come definiti nel metodo Selector.xpath (). |
2 | css(query) Utilizza il metodo .css () per gli elementi e restituisce i risultati come istanza di SelectorList. La query con i parametri specifica gli argomenti come definiti nel metodo Selector.css (). |
3 | extract() Mette in evidenza tutti gli elementi della lista usando il metodo .extract () e restituisce il risultato come un elenco di stringhe Unicode. |
4 | re() Usa il metodo .re () per gli elementi e mette in evidenza gli elementi come un elenco di stringhe Unicode. |
5 | __nonzero__() Se l'elenco non è vuoto, questo metodo restituisce true, altrimenti restituisce false. |
Gli oggetti SelectorList contengono alcuni dei concetti come spiegato in questo collegamento .