2014-11-01 118 views
1

我试图从类foo的td标签的第一个孩子中提取hrefs。一个例子DOM是:lxml - 根据父类获取子属性

<td class="foo"> 
    <a href="www.foobar1.com"></a> 
</td> 
<td class="foo"> 
    <a href="www.foobar2.com"></a> 
</td> 

从这个我想获得["www.foobar1.com", "www.foobar2.com"]

到目前为止,我有以下几点:

import requests 
from lxml import html 

def get_hrefs(url): 
    page = requests.get(url) 
    tree = html.fromstring(page.text) 
    td_elements = tree.xpath('//td[@class="foo"]') 

    return [el.find("a").attrib["href"] for el in td_elements] 

不过,我觉得它会更有效延长xpath代替迭代,但不知道如何构建它。

谢谢。

回答

1

是的,你可以通过从a标签得到@href每个td里面把它简化:

return tree.xpath('//td[@class="foo"]/a/@href') 
+0

这是否仅返回第一个孩子每个TD?我问,因为我得到更多的href的,那么有这个类的TD。 – 2014-11-01 18:47:13

+0

dom_tree.xpath('// td [@ class =“link”]/a [1] // @ href')似乎为这种情况做了诀窍! – 2014-11-01 18:54:59