2011-07-31 184 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表達式來選擇父節點或任意祖先。

相關問題