2014-09-05 101 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。