lxml:如何获取具有特定子元素的元素?
在使用lxml库时,我想获取所有包含一个子元素为且这个
的标题是“Go to next page”的链接的
在下面这段代码中:
<a class="noborder" href="StdResults.aspx">
<img src="arrowr.gif" title="Go to next page"></img>
</a>
我希望能得到StdResults.aspx
这个结果。
我已经做到这一步:
next_link = doc.xpath("//a/img[@title='Go to next page']")
print next_link[0].attrib['href']
但是next_link
得到的是,而不是标签——我该如何获取标签呢?
谢谢。
2 个回答
0
你还可以通过使用 //a/img[@title='Go to next page']/parent::a
或 //a/img[@title='Go to next page']/ancestor::a
这样的XPath表达式来选择父节点或任意祖先节点。
2
只需要把 a/img...
改成 a[img...]
就可以了:(这个方括号的意思有点像“满足某种条件”)
import lxml.html as lh
content='''<a class="noborder" href="StdResults.aspx">
<img src="arrowr.gif" title="Go to next page"></img>
</a>'''
doc=lh.fromstring(content)
for elt in doc.xpath("//a[img[@title='Go to next page']]"):
print(elt.attrib['href'])
# StdResults.aspx
或者,你可以更进一步,使用
"//a[img[@title='Go to next page']]/@href"
来获取 href 属性的值。