Vai al contenuto principale

Come utilizzare XPath relativo a individuare dati fuori di un loop item

Aggiornato più di un anno fa

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:

categoryandproduct.jpg

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.

mceclip5.png


Nel caso fossi ancora confuso, permettimi di spiegarti passo passo con il sito web di esempio:

  • Creare un loop per tutti i prodotti

mceclip2.png

  • Controllare l'XPath dei prodotti nel codice sorgente HTML:

mceclip3.png

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:

  1. Individua prima un genitore del nodo dei prodotti (ancestor::)

  2. Localizza il fratello precedente del genitore sopra (preceding-sibling::)

  3. 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

mceclip6.png

Ecco i dati di esempio:

mceclip7.png

Hai ricevuto la risposta alla tua domanda?