如何在 python 中使用 xpath 提取数字,如果数字周围有文本



我正在尝试从网站上获取价格,并面临有时他们会在字段中添加额外文本的问题。

例如

<span class="price--content content--default">
Ihr Preis:
13.815,00&nbsp;€
</span>
>>> response.xpath('//span[@class="price--content content--default"]/text()').extract()
['n', 'n', 'nIhr Preis:n13.815,00xa0€n']

这里再举一个例子:

<span class="price--content content--default">
Jetzt:
5.765,00&nbsp;€
</span>

如何确保 xpath 在所有情况下都获取数字,即使没有文本而只是数字?

如果不可能,作为替代方案,我如何使用 python 获取列表的第一个数字?

即使使用 XPath 1.0 表达式也可以做到这一点,前提是只有一个数字,并且您使用的 python 模块可以处理节点集以外的结果数据类型。用:

translate(
   //span[@class="price--content content--default"],
   translate(//span[@class="price--content content--default"],'0123456789.,',''),
   '')

你可以用正则表达式找到这些。例如

import re
string1 = 'nIhr Preis:n13.815,00xa0€n'
string2 = 'nIhr Preis:n5.765,00&nbsp;€xa0€n'
my_num = re.findall(r'd+.d+', string1)   # or string2
print(my_num)

由于您正在寻找价格,因此问题在于,据推测,您需要提取整个价格,包括美分(或给定货币的任何等值物(。因此,稍微修改您的第二个示例:

my_str = '<span class="price--content content--default">Jetzt:5.765,12&nbsp;€</span>'

输出应该是整个5.765,12。因此,在不使用正则表达式的情况下,我建议:

for char in my_str:
if char.isdigit() or char =='.' or char==',':
    print(char, end ="")

输出:

5.765,12

相关内容

最新更新