我正在尝试从其中包含表格的 html 页面获取一些数据。我得到了 ugin xpath 的行列表,现在我试图在 tr
内的 td
的每个元素中获取 text(),这是 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”?
最佳答案
[td.xpath('normalize-space()')for td in tree.xpath('//tr/td')]
输出:
['SHOP', 'COUNTRY', '1 038,00 USD', '899,00 USD', '899,00 USD', 'Order']
[normalize-space()]
是一个删除空字符串的过滤器。如果需要获取标签下的字符串,请使用 normalize-space(tag)
使用strip
或replace
摆脱USD
[td.xpath('normalize-space()').strip(' USD') for td in tree.xpath('//tr/td')]
输出:
['HOP', 'COUNTRY', '1 038,00', '899,00', '899,00', 'Order']
编辑:
tree.xpath('//tr/td//text()')
输出:
['\n ', # empty, discard
' SHOP\n ',
'\n ', # empty, discard
'COUNTRY',
'1 038,00 USD',
'899,00 USD',
'899,00 USD',
'\n', # empty, discard
' Order',
'\n '] # empty, discard
如果[normalize-space()]
影响字符串,则输出的'Order'
将不包含开头的空格。
[]
只会像 bool 值一样过滤 false 值,不会改变值。
关于python xpath 空间没有被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931239/