LXML xpath正在剥离括号的输出

时间:2018-01-07 04:48:21

标签: python xpath web-scraping lxml

我试图取消美国证券交易委员会提交的数据财务报告。以下是示例表的链接:

if(<?=$_GET['email']?>=='sent'){alert('Thank you!')}

在target_page的源代码中,带有数字输出的表格单元格标有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)

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这是因为具有负值的单元格具有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"]')]