Scrapy'normalizespace()'正在截断整个字符串

2024-06-23 02:59:50 发布

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

我正在抓取这样一个XML文档:

>>> response.xpath("//ul[@class='meta-info d-flex flex-wrap align-items-center list-unstyled justify-content-around']/li[position()=2]/text()").extract()

并给我以下输出:

['\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t23 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ', '\n            ', '\n\t\t\t                ', '\n\t\t\t\t24 Feb, 2019        ']

但我不希望任何字段是换行符、制表符或空格,因此我尝试使用normalize-space()函数,如下所示:

>>> response.xpath("normalize-space(//ul[@class='meta-info d-flex flex-wrap align-items-center list-unstyled justify-content-around']/li[position()=2]/text())").extract()

但我得到一个空输出:

['']

这里发生了什么?你知道吗


Tags: inforesponseitemsulxpathfebmetalist
2条回答

我使用regex解决了一个类似的问题,如果您想测试的话,我在下面介绍了这个问题。我发现效果很好。这个question应该回答规范化空间的问题。它应该在文本节点上返回一个空字符串。你知道吗

import re
item_text = response.xpath("//ul[@class='meta-info d-flex flex-wrap align-items-center list-unstyled justify-content-around']/li[position()=2]/text()").extract()
re.sub('[\s]{2,}', '\n', "".join(item_text).strip())

normalize-space()处理单个字符串。你给它一个完整的节点列表。你知道吗

所以它取第一个,把它转换成字符串,然后返回结果。第一个节点的值为'\n '。你知道吗

//ul[@class='meta-info d-flex flex-wrap align-items-center list-unstyled justify-content-around']/li[position()=2]上写一个for循环,并在各个节点上调用normalize-string()。你知道吗

相关问题 更多 >

    热门问题