2017-02-03 64 views
1

我在Python中使用xpath来解析HTML文件中的表。我使用这个XPath:什么是从文本()使用xpath去除东西的方式?

//td//text() 

这给我输出两个字符串:

['australia', '$3333.99'] 

输出我想:

['australia', '3333.99'] 

,但我想剥离$符号如何我这样做一般使用xpath?我试过substring-after但它不起作用。

这是我尝试:

//td//text()[substring-after(.,'$')] 

,但我得到这样的输出:

['$3333.99'] 

Australia从结果缺少

+0

你试图表达的是显示在XPath 2.0中很好,但在XPath 1.0中没有。您应该指定您正在使用的XPath版本。虽然它没有做你想要的东西:尝试// td // text()/ substring-after(。,'$')' –

回答

1

除了使用translate()(如张贴在其他答案),也可以使用substring() function并动态确定片的开始:

In [4]: [item.xpath("substring(., starts-with(., '$') + 1)") for item in root.xpath("//td")] 
Out[4]: ['australia', '3333.99'] 

顺便说一句,这种方法比使用translate(),因为,在这里,我们只在一个字符串,如果它存在,开始剥一个$字符更安全一点,但translate()将在更换的$所有出现您正在提取的每个td文本。你可能会得到一些不需要的副作用。

注意,你必须这样做,在任何情况下,两个步骤 - 在translate()substring()功能不会被应用到每一个节点,如果使用像translate(//td//text(), "$", ""),引用:

或者,你可以使用Python修剪它和.lstrip()

[item.lstrip("$") for item in root.xpath("//td//text()")] 
+0

我意识到这一点,但我不想循环列表,因为我有其中500多个,它使功能慢。我正在寻找一种使用xpath mayb的方法,使用'translate' – anekix

+0

@anekix gotcha,正在处理它,谢谢。 – alecxe

+0

谢谢,等待回复 – anekix

0
//td//text()[substring-after(.,'$')] 

这将在['australia', '$3333.99']评估text(),并为 australia,它的剂量不包含$,这将返回false,并且不会在结果

[td.xpath('translate(., "$", "")')for td in tree.xpath("//td")] 
+0

感谢您的回复如何。什么是正确的方式? – anekix

+0

@anekix xpath用于定位标签,而不是修改标签。是的,xpath路径可以完成这个任务,但是python'strip'是更好的选择。 –

+0

我有500列表申请lstrip在它不是我知道的大事件,但我必须做400表,所以现在它的400X500它是一个昂贵的循环,我认为它会减慢我的应用程序 – anekix

相关问题