2017-02-03 26 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

相關問題