2017-02-26 4 views
1

Hi ich versuche E-Commerce-Seite zu verschrotten, kann aber keine Preise bekommen.Wie man volle Preise mit scrapy extrahiert?

Ich habe die Seite mit diesen Zeilen:

<span class="price">255,<sup>99</sup>€</span> 
<span class="price">255 €</span> 

Aber ich alle Preis eine Zeile nicht extrahiert werden.

Ich habe versucht:

response.xpath ('// Spanne [@ class = "Preis"]/text()') extrahieren()

Aber es ignoriert Text in. <sup> tag ... Was mache ich falsch? bitte hilfe.

Antwort

1

Sie müssen vor dem Text einen weiteren Schrägstrich hinzufügen. Es adressiert also ALLE Knoten.

response.xpath('//span[@class="price"]//text()').extract() 

Text='255,' 
Text='99' 
Text='€' 
+0

sondern wie sie zu einem Feld verbinden? – user3237444

0

Sie sollten Doppelspritzer anstelle von einem einzigen setzen.

response.xpath('//span[@class="price"]//text()').extract() 

Diese Anweisung gibt den gesamten Text unter dem angegebenen Tag als Listenobjekt zurück. Beachten Sie, dass die zurückgegebene Liste einige nutzlose Elemente enthalten kann, wie Leerzeilen oder Zeilenumbrüche. Sie können also Regex verwenden, wenn Sie nur Preisinformationen extrahieren möchten.

response.xpath('//span[@class="price"]//text()').re(r'[\d.,]+') 

Das Währungssymbol wurde ignoriert.

['255,','99','255'] 

Schließlich, wenn Sie wollen

''.join(response.xpath('//span[@class="price"][1]//text()').re(r'[\d.,]+')).replace(",",".") 

Sie alle ersten Produkte erhalten 255.99 von der Seite bekommen.

Schlusscode:

products = response.xpath('//*[@class="catalog-table"]//td') 
 
for prod in products: 
 
    price = ''.join(prod.xpath('//span[@class="price"][1]//text()').re(r'[\d.,]+')).replace(",",".") 
 
    print price

+0

Danke, ich habe das auf der Seite https://www.varle.lt/m/mobilieji-telefonai?p=4 in der Shell versucht, aber es gibt mir jetzt alles in einem Feld. – user3237444

+0

Verwenden Sie Scrapy? Wenn dann das tun. Zuerst sollten Sie alle Produkte nacheinander durchlaufen. Sie können eine Liste von Produkten mit diesem erhalten ('// * [@ class = "catalog-table"] // td') und dann alle Produkte iterieren und den Preis von jedem Produkt erhalten. Ich werde meinen Antwortbeitrag bearbeiten. – bbanzzakji

Verwandte Themen