2017-02-26 61 views
1

嗨,我想要取消電子商務頁面,但不能得到價格。如何使用scrapy提取全價?

我有這樣的行頁:

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

但我不能提取所有的價格一行。

我嘗試:

response.xpath( '//跨度[@類= 「價格」] /文本()')中提取()

但在忽略文本。 <sup>標籤... 我做錯了什麼?請幫忙。

回答

1

您需要在文本前添加另一個斜槓。所以它解決了所有節點。

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

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

但如何將它們加入到一個領域? – user3237444

0

你應該把雙飛濺,而不是單一的飛濺。

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

該語句返回指定標籤下的所有文本作爲列表對象。 請注意,返回的列表可能會有一些無用的元素,如空或返回的字符。 所以你可以使用正則表達式,如果你只想提取價格信息。

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

貨幣符號被忽略。

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

最後,如果你想從頁面

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

你第一次得到所有的產品拿到255.99。

最終代碼:

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

謝謝,我在頁面https://www.varle.lt/m/mobilieji-telefonai?p=4在shell中試過這個,但它現在給我在一個領域的一切。 – user3237444

+0

你使用scrapy嗎?如果這樣做。首先你應該逐個迭代所有產品。你可以用這個('// * [@ class =「catalog-table」// td')得到產品列表,然後遍歷所有產品並從每個產品中獲得價格。我將編輯我的答覆帖子。 – bbanzzakji