2011-07-31 49 views
1

lxmlで作業中、を持つimg子を持つすべてのリンクのhref属性を取得したいと思います。次のスニペットでそう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_linkは、aタグimgではありません - 私は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式として使用して、親ノードまたは任意の祖先を選択することもできます。

関連する問題