Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy Xpath无法获取所有价格_Python_Xpath_Scrapy - Fatal编程技术网

Python Scrapy Xpath无法获取所有价格

Python Scrapy Xpath无法获取所有价格,python,xpath,scrapy,Python,Xpath,Scrapy,我用刮痧来爬 我对价格xpath存在问题,这只会拉高一些价格: //div[@class="buy-box-container"]/p[2]/text() 通过删除text(),我想我可以理解为什么会有这样的设置,这些设置会影响价格: <p class="price"> £189.00 </p> £189.00 非结构化的结构如下所示: <p class="price"> <span class="from">From</span

我用刮痧来爬

我对价格xpath存在问题,这只会拉高一些价格:

//div[@class="buy-box-container"]/p[2]/text()
通过删除text(),我想我可以理解为什么会有这样的设置,这些设置会影响价格:

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

£189.00

非结构化的结构如下所示:

<p class="price">

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

从…起 £549.00

因此,strip()似乎正在删除这些。Xpath有没有一种方法可以让我从段落标记中获取文本,而不是从其中的跨度中获取文本


谢谢

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

我只需要从“price”元素中获取所有的“text”节点,然后使用
.re_first()
获取金额:

或者,使用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]

你是个英雄。我刚刚阅读了关于re_的文档,因为我没有意识到这一点。但是你能解释一下r“\d+\.\d+”在做什么吗?非常感谢@当然,这只是一个正则表达式,它将匹配一个或多个数字,后跟一个文字点,后跟一个或多个数字。希望有帮助。
price = quote.xpath('.//div[@class="buy-box-container"]/p[2]//text()').re_first(r"\d+\.\d+")
price = quote.css('.buy-box-container .price').re_first(r"\d+\.\d+")