lxmlxpath正在剥离括号的输出

2022-12-01 05:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从SEC的财务文件中删除数据。下面是指向示例表的链接:

target_page = 'https://www.sec.gov/Archives/edgar/data/1564408/000156459017022434/R4.htm'

在目标页面的源代码中,具有数字输出的表单元格用<td class="num" ...> <a ..>somevalue</a></td>标记。如果值为负数,则将其写为<td class="num" ...> <a ..>(somevalue)</a></td>(即绝对值用()括号括起来,而不是用-负号开头)。你知道吗

我可以通过以下lxml/requests脚本轻松地提取这些值:

from lxlm.html import fromstring
import requests
page =  requests.get(target_page) 
tree = page.fromstring(page.content)
values = tree.xpath('//td[@class="nump"]/text()')

我的问题是:

出于某种原因,tree.xpath('//td[@class="nump"]/text()')只提取数字,不返回任何()字符。在示例页面中,我链接的一个值是(461,827),但我的代码只返回461,827。你知道吗

有办法解决这个问题吗?你知道吗


Tags: importtree示例target链接page数字页面requestsxpathnumclasstdfromstringsomevalue
1条回答
网友
1楼 · 发布于 2022-12-01 05:22:36

这是因为具有负值的单元格有一个num类,而不是nump。您可以同时处理这两个问题:

//td[@class="nump" or @class="num"]/text()

或:

//td[starts-with(@class, "num")]/text()

并且,为了避免在输出中有额外的换行符,请使用.text_content()

[cell.text_content().strip() for cell in tree.xpath('//td[@class="nump" or @class="num"]')]