2017-02-26 60 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