如何用scrapy提取全价?

时间:2017-02-26 08:55:59

标签: scrapy

您好我正在尝试废弃电子商务页面,但无法获得价格。

我有这一行的页面:

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

但我无法将所有价格提取到一行。

我试过了:

  

response.xpath( '//跨度[@类= “价格”] /文本()')。提取物()

但它会忽略<sup>标记中的文字... 我做错了什么?请帮忙。

2 个答案:

答案 0 :(得分:1)

您需要在文本之前添加另一个斜杠。所以它解决所有节点。

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

Text='255,'
Text='99'
Text='€'

答案 1 :(得分:1)

你应该把双重泼水而不是单一泼水。

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

此语句将指定标记下的所有文本作为列表对象返回。 请注意,返回的列表可能有一些无用的元素,就像空或返回托架字符。 因此,如果您只想提取价格信息,则可以使用正则表达式。

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

货币符号被忽略。

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

最后,如果你想从页面获得255.99

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

您首先获得所有产品。

最终代码:

&#13;
&#13;
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
&#13;
&#13;
&#13;