lxml:如何获取具有特定子元素的元素?

1 投票
2 回答
5076 浏览
提问于 2025-04-16 22:37

在使用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 属性的值。

撰写回答