我正在尝试从一个包含表的html页面中获取一些数据。我在xpath中得到了一个行列表,现在我试图在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>
下面是我用python编写的xpath:
td_xpath = XPath("./td/a/text()[normalize-space()] | ./td/text()[normalize-space()]")
我得到的结果是:
['\r\n SHOP\r\n ', 'COUNTRY', '1038,00 USD', '899,00 USD', '899,00 USD', ' Order']
为什么不从第一个元素中删除空格?你知道吗
另外,如何使用xpath从价格中删除“,”和“USD”?你知道吗
您需要做的是正确地规范化值:
始终使用
Decimal
表示货币值。这避免了数字不准确的问题,瘟疫浮动,可以花费你美分。你知道吗要处理列表,请过滤掉那些不是货币值的字符串(在本例中是那些不以
USD
结尾的字符串)(可能还有另一种更适合XML输入的方法),然后转换其余的字符串:结果:
或者您可以尝试转换每个项目并忽略引发异常的项目:
这也导致:
输出:
[normalize-space()]
是一个除去空字符串的过滤器。如果需要获取标记下的字符串,请使用normalize-space(tag)
使用
strip
或replace
去除USD
输出:
编辑:
输出:
如果
[normalize-space()]
影响字符串,则输出' Order'
将不包含开头的空格。你知道吗[]
只会像布尔值一样过滤假值,不会改变值。你知道吗相关问题 更多 >
编程相关推荐