有没有办法显示:(a)到定位节点的完整路径?(b)显示路径节点的属性,即使我不知道这些属性可能被称为什么?
例如,给定一个页面:
<!DOCTYPE html>
<HTML lang="en">
<HEAD>
<META name="generator" content=
"HTML Tidy for HTML5 for Linux version 5.2.0">
<META charset="utf-8">
<TITLE>blah ombid lipsum</TITLE>
</HEAD>
<BODY>
<P>I'm the expected content</P>
<DIV unexpectedattribute="very unexpected">
<P>I'm wanted but not where you thought I'd be</P>
<P class="strangeParagraphType">I'm also wanted text but also mislocated</P>
</DIV>
</BODY>
</HTML>
我能找到想要的文字与
# Import Python libraries
import sys
from lxml import html
page = open( 'findme.html' ).read()
tree = html.fromstring(page)
wantedText = tree.xpath(
'//*[contains(text(),"wanted text")]' )
print( len( wantedText ), ' item(s) of wanted text found')
然而,找到它之后,我希望能够打印出所需文本位于以下位置的事实:/HTML/BODY/DIV/P
...甚至更好地表明其位于/HTML/BODY/DIV/P[2]
...处,并且更好地显示出它位于/DIV
具有unexpectedattribute="very unexpected"
且最终<P>
具有的类的那个位置strangeParagraphType
。
对于第一个示例,可以使用如下所示的内容:
['/'.join(list([wt.tag] + [ancestor.tag for ancestor in wt.iterancestors()])[::-1]).upper() for wt in wantedText]
可以使用元素对象上的attrib属性和一些自定义逻辑来创建第三个:
wantedText[0].getparent().attrib
>>> {'unexpectedattribute': 'very unexpected'}
wantedText[0].attrib
>>> {'class': 'strangeParagraphType'}
编辑:顶部重复答案链接绝对是一个更好的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句