python xpath空间未被删除
我试图从一个包含表格的html页面中获取一些数据。我在xpath中得到了一个行列表,现在我试图在python xpath空间未被删除,python,xpath,Python,Xpath,我试图从一个包含表格的html页面中获取一些数据。我在xpath中得到了一个行列表,现在我试图在td的每个元素中得到text(),在tr中,下面是tr的基本结构 <tr> <td> <a href="#" onclick="WhoisOrderDomain('bank'); return false;"> SHOP </a> </td> <td>COUNTR
td
的每个元素中得到text(),在tr
中,下面是tr
的基本结构
<tr>
<td>
<a href="#" onclick="WhoisOrderDomain('bank'); return false;"> SHOP
</a>
</td>
<td>COUNTRY</td>
<td class="text-right">1 038,00 USD</td>
<td class="text-right">899,00 USD</td>
<td class="text-right">899,00 USD</td>
<td class="text-center">
<a class="btn btn-sm btn-info" href="#" onclick="WhoisOrderDomain('bank'); return false;"><i class="fa fa-shopping-cart"></i> Order</a>
</td>
</tr>
我得到了这个输出:
['\r\n SHOP\r\n ', 'COUNTRY', '1038,00 USD', '899,00 USD', '899,00 USD', ' Order']
为什么不从第一个元素中删除空格
另外,如何使用xpath从价格中删除“,”和“USD”
[td.xpath('normalize-space()')for td in tree.xpath('//tr/td')]
输出:
[normalize-space()]
是一个清除空字符串的过滤器。如果需要获取标记下的字符串,请使用规范化空格(标记)
使用strip
或replace
去除USD
[td.xpath('normalize-space()').strip(' USD') for td in tree.xpath('//tr/td')]
输出:
编辑:
输出:
如果[normalize-space()]
影响字符串,则输出的'Order'
将不包含开头的空格
[]
只会像布尔值一样过滤假值,它不会更改值。您需要做的是正确规范化值:
>>> from decimal import Decimal
>>> Decimal('1 038,00 USD'.rstrip('USD').replace(' ','').replace(',','.'))
Decimal('1038.00')
始终使用十进制
表示货币值。这避免了数字不准确的问题,这些问题困扰着浮动,并且可能会花费你几美分
要处理列表,请过滤掉那些不是货币值的字符串(在本例中是那些不是以
USD
结尾的字符串)(可能还有另一种更适合XML输入的方法),然后转换其余的字符串:
input_values = ['.ac.tz', 'Tanzania', '135,00 USD', '135,00 USD', '0,00 USD', ' Order']
monetary_values = [Decimal(v.rstrip('USD').replace(' ','').replace(',','.'))
for v in input_values if v.endswith('USD')]
结果:
>>> monetary_values
[Decimal('135.00'), Decimal('135.00'), Decimal('0.00')]
>>> monetary_values
[Decimal('135.00'), Decimal('135.00'), Decimal('0.00')]
或者,您可以尝试转换每个项目并忽略引发异常的项目:
import decimal
from decimal import Decimal
input_values = ['.ac.tz', 'Tanzania', '135,00 USD', '135,00 USD', '0,00 USD', ' Order']
monetary_values = []
for v in input_values:
try:
monetary_values.append(Decimal(v.rstrip('USD').replace(' ','').replace(',','.')))
except decimal.InvalidOperation:
pass
这也导致:
>>> monetary_values
[Decimal('135.00'), Decimal('135.00'), Decimal('0.00')]
>>> monetary_values
[Decimal('135.00'), Decimal('135.00'), Decimal('0.00')]
@anekix[normalize-space()]是一个清除空字符串的过滤器。它不会改变字符串。谢谢你的回复,但是我很难理解为什么我的代码不能工作
/td/a/text()[normalize-space()?因为下一个语法相同的xpath正在运行,我如何才能从货币中删除“,”和USD?@anekix[td.xpath('normalize-space()')).strip('USD')。在tree.xpath('//tr/td')]
感谢您的帮助:)中替换(',','')td。但是为什么在我的xpath中空间没有被规范化呢?我希望使用xpathi获得这样的结果['.ac.tz',坦桑尼亚','135,00 USD','135,00 USD','0,00 USD','Order']我如何将此应用于它?
>>> monetary_values
[Decimal('135.00'), Decimal('135.00'), Decimal('0.00')]
import decimal
from decimal import Decimal
input_values = ['.ac.tz', 'Tanzania', '135,00 USD', '135,00 USD', '0,00 USD', ' Order']
monetary_values = []
for v in input_values:
try:
monetary_values.append(Decimal(v.rstrip('USD').replace(' ','').replace(',','.')))
except decimal.InvalidOperation:
pass
>>> monetary_values
[Decimal('135.00'), Decimal('135.00'), Decimal('0.00')]