2014-09-05 55 views
1

我頁:如何將XPath元素轉換爲純HTML文本?

<body> 
    <div> 
    <a id="123">text_url</a> 
    </div>  
<body> 

我想元素 '// DIV /一個' 純HTML文本。

<a id="123">text_url</a> 

我該怎麼辦?

+1

從XPath的角度來看,'// DIV/A'已指向''text_url。其餘依賴於XPath主機。什麼是您正在使用的XPath引擎?編程語言和Xpath庫可能? – har07 2014-09-05 11:31:09

+0

python語言,libs - lxml,抓取。據我所知,XPath標準不支持這種常用方法? – 2014-09-05 11:36:43

+2

我不知道python,也許別人可以帶你。通常,XPath庫提供了獲取節點標記的方法。例如,在.NET中,我可以這樣做:'var node = xml.SelectSingleNode(「// div/a」); var nodesMarkup = node.OuterHtml;' – har07 2014-09-05 11:41:54

回答

1

如果您已經使用解析的lxml對象,你可以用lxml.etree.tostring()序列化:

from lxml import etree 
xml='''<body> 
    <div> 
    <a id="123">text_url</a> 
    </div>  
</body>''' 

root = etree.fromstring(xml) 
for a in root.xpath('//div/a'): 
    print etree.tostring(a, method='html', with_tail=False) 
0

在python中使用抓取模塊的工作解決方案。

from grab import Grab 

g = Grab() 
g.go('file://page.htm') 
print g.doc.select('//div/a')[0].html() 

>><a id="123">text_url</a> 
0

你可以用re.findall來使用python的re模塊。

import re 
print re.findall(r".*?(<a.*?<\/a>).*",x,re.DOTALL) 

其中x是 X = 「」 「 text_url 」「」

Output:['<a id="123">text_url</a>'] 

見演示爲好。

http://regex101.com/r/lF4lY6/1

+3

正則表達式不適合需要從複雜頁面上的某些標記中提取html的任務 – 2014-09-05 12:27:07

0

你可以在Python中使用XML庫。

from xml.etree.ElementTree import parse 

doc = parse('page.xml') # assuming page.xml is on disk 
print doc.find('div/a[@id="123"]').text 

請注意,這隻適用於嚴格的XML。 例如,您關閉body標籤不正確,並且此代碼在此情況下會失敗。 Web上的HTML不是嚴格的XML。