【问题标题】:How to extract full prices with scrapy?如何用scrapy提取全价?
【发布时间】:2017-07-16 22:23:48
【问题描述】:

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

我有这样一行的页面:

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

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

我试过了:

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

但它会忽略&lt;sup&gt; 标记中的文本... 我做错了什么?请帮忙。

【问题讨论】:

    标签: scrapy


    【解决方案1】:

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

        response.xpath('//span[@class="price"]//text()').extract()
    
    Text='255,'
    Text='99'
    Text='€'
    

    【讨论】:

    • 但是如何将它们加入一个字段?
    【解决方案2】:

    你应该放双飞溅而不是单飞溅。

    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(",",".")
    

    您首先获得所有产品。

    最终代码:

    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

    【讨论】:

    • 谢谢,我在 shell 的 varle.lt/m/mobilieji-telefonai?p=4 页面上试过这个,但它现在给了我一个领域的一切。
    • 你使用scrapy吗?如果然后这样做。首先,您应该逐个迭代所有产品。您可以使用此 ('//*[@class="catalog-table"]//td') 获取产品列表,然后迭代所有产品并从每个产品中获取价格。我将编辑我的回答帖子。
    猜你喜欢
    • 2017-05-03
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多