lxml - 基于父类获取子属性

时间:2014-11-01 18:17:26

标签: python html xpath lxml lxml.html

我正在尝试使用类foo从td标记的第一个子节点提取href。一个示例DOM是:

<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 个答案:

答案 0 :(得分:1)

是的,您可以通过从@href内的a标记获取td来简化它:

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