2011-07-31 150 views
1

在lxml中工作时,我想要获得href属性的所有链接img孩子有title="Go to next page"lxml:获取具有特定子元素的元素?

所以在下面的代码片段:

<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_linkimg,而不是a标签 - 我怎么能得到a标签?

谢谢。

+0

[XPath:获取节点,其中的子节点包含一个属性](http://stackoverflow.com/questions/1457638/xpath-get-nodes-where-child-node-contains-an-attribute) – katrielalex

回答

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属性。

+0

非常感谢。 – Richard

+0

谢谢,我一直以为[@ ..]只能指定属性。实际上我想知道是否有任何好的地方可供参考或lxml样本用于这种混淆? –

0

您还可以分别使用//a/img[@title='Go to next page']/parent::a//a/img[@title='Go to next page']/ancestor::a作为XPath表达式来选择父节点或任意祖先。

相关问题