Anche se non è comune in alcuni casi dobbiamo ottenere dati fuori degli attuali elementi in loop.
Diamo che vorremo estrarre dati dalla pagina dei bestseller su Amazon. Abbiamo bisogno di ottenere contemporaneamente i dettagli del prodotto e la categoria di appartenenza per ogni prodotto come mostrato nell'immagine seguente:
Se creiamo un loop solo per i prodotti, apparentemente i dati della categoria non saranno inclusi nel ciclo dei prodotti. Cosa possiamo fare?
Proviamo a utilizzare l'XPath del loop dei prodotti come ASIX e scrivere un XPath relativo per individuare i dati della categoria.
Nel caso fossi ancora confuso, permettimi di spiegarti passo passo con il sito web di esempio:
Creare un loop per tutti i prodotti
Controllare l'XPath dei prodotti nel codice sorgente HTML:
Quindi l'XPath per i prodotti sarebbe: //li[@class="a-carousel-card"]
A questo axis aggiungiamo i dati della categoria come sotto:
//li[@class="a-carousel-card"]/ancestor::div[@class="a-row a-carousel-controls a-carousel-row a-carousel-has-buttons"]/preceding-sibling::div[@class="a-row a-carousel-header-row a-size-large"]//h2
Vediamo insieme come localizzare l'elemento della categoria questo XPath:
Individua prima un genitore del nodo dei prodotti (ancestor::)
Localizza il fratello precedente del genitore sopra (preceding-sibling::)
Indirizza l'elemento della categoria nel tag <h2>
(Scopri di più sulle espressioni XML qui)
Poiché abbiamo impostato l'XPath corrispondente per il loop item (l'XPath AXIS), l'XPath per il campo dati del prodotto dovrebbe essere lasciato vuoto, mentre l'XPath relativo per la categoria dovrebbe essere questo:
/ancestor::div[@class="a-row a-carousel-controls a-carousel-row a-carousel-has-buttons"]/preceding-sibling::div[@class="a-row a-carousel-header-row a-size-large"]//h2
Ecco i dati di esempio: