繁体   English   中英

Scrapy Xpath无法获得所有价格

[英]Scrapy Xpath unable to get all prices

我正在使用scrapy来爬行此页面

class QuotesSpider(scrapy.Spider):
    name = "tesco"
    start_urls = [
        'https://www.tesco.com/direct/tv-offer.event?icid=offers_trade_slot1',
    ]

    def parse(self, response):
        for quote in response.xpath('//li[contains(@class,"product-tile")]'):
            learningscrapyItem = crawlerItem()
            learningscrapyItem['title'] = quote.xpath('.//h3/a/text()').extract_first()
            price = quote.xpath('.//div[@class="buy-box-container"]/p[2]/text()').extract_first()
            learningscrapyItem['price'] = price.strip()
            yield (learningscrapyItem)

我在价格xpath上遇到问题,这只会拉高一些价格:

//div[@class="buy-box-container"]/p[2]/text()

通过删除text(),我想我可以看到原因,尽管如此,但拉价的原因如下所示:

<p class="price">
£189.00
</p>

没有的结构如下:

<p class="price">

<span class="from">From</span>
£549.00
</p>

所以strip()似乎正在删除这些。 Xpath是否有一种方法可以使我从段落标签中获取文本,而不能从文本标签中或跨度获取文本?

谢谢。

问题在于/text()仅匹配直接文本子节点,并且,您正确理解,第二个示例破坏了选择器。

我只是从“ price”元素中获取所有“ text”节点,然后使用.re_first()获取数量:

price = quote.xpath('.//div[@class="buy-box-container"]/p[2]//text()').re_first(r"\d+\.\d+")

或者,使用CSS选择器而不是XPath更简单:

price = quote.css('.buy-box-container .price').re_first(r"\d+\.\d+")

请尝试以下方式获取您想要的价格。

而不是使用此:

quote.xpath('.//div[@class="buy-box-container"]/p[2]/text()').extract_first()

尝试使用此:

quote.xpath('.//div[@class="buy-box-container"]//p[@class="price"]/text()').extract()[-1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM