如何根据兄弟标记的值从lxml.etree标记中提取文本

时间:2017-01-18 22:56:16

标签: python python-2.7 python-3.x lxml

我的目标是从xml文档(链接)中提取URL并将它们放在列表中: https://www.valuespreadsheet.com/iedgar/results.php?stock=NFLX&output=xml

我从etree导入了lxml并创建了一个列表推导,从所有<instanceUrl>标记中提取文本。

url = 'https://valuespreadsheet.com/iedgar/results.php?stock=NFLX&output=xml' 
et = etree.fromstring(urlopen(url).read())
return [_.find('instanceUrl').text for _ in et.find('filings')]

现在,我想限制列表,以便它只从<instanceUrl>标记中提取<formType> = 10K的文本。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

您需要XPath expression and the xpath() method

[url.text for url in et.xpath('//filing[formType = "10-K"]/instanceUrl')]

在这里,我们使用filing文本过滤包含formType子节点的10-K个节点,然后获取instanceUrl子节点。

请注意,_变量名称用于丢弃变量 - 必须定义但未实际使用的变量(例如在解包期间)。在您的情况下,您实际上已经使用过它。