我正在尝试从网站上获取价格,并面临有时他们会在字段中添加额外文本的问题。
例如
<span class="price--content content--default">
Ihr Preis:
13.815,00 €
</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 €
</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 €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 €</span>'
输出应该是整个5.765,12
。因此,在不使用正则表达式的情况下,我建议:
for char in my_str:
if char.isdigit() or char =='.' or char==',':
print(char, end ="")
输出:
5.765,12