有没有一种显示方式: (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
类。
答案 0 :(得分:0)
对于您拥有的第一个示例,可以使用类似的方法:
['/'.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'}
编辑:顶部的重复答案链接绝对是一种更好的选择。