lxml / scrapy选择器是否可以不传输html实体

问题描述 投票:1回答:1

使用lxml / scrapy选择器xpath后如何获取原始的html实体?

我已经尝试使用lxml代替parsel包,这是同样的问题。

mytext = '<html><body><span>go&nbsp;od</span></body></html>'
sel = parsel.Selector(text=mytext)
sel.xpath('//body').extract()

实际输出:

['<body><span>go\xa0od</span></body>']

预期输出:

['<body><span>go&nbsp;od</span></body>']

&nbsp;已转换,如何保持原样?

python scrapy lxml html-entities parsel
1个回答
1
投票

根据文档,当前,.extract().getall()方法返回原始html with Unicode字符,例如\xa0,即&nbsp;。更多信息here

但是,.extract_first().get()方法仅返回列表中的第一个,并且输出为without Unicode字符。 (Docs

print(sel.xpath('//body').get())

输出:

<body><span>go od</span></body>

但是如果您真的想使用&nbsp;而不是''\xa0。然后一种解决方案是对这些字符进行常规字符串替换。

示例:

body = sel.xpath('//body').extract()

result = [i.replace('\xa0', '&nbsp;') for i in body]

print(result)

输出:

['<body><span>go&nbsp;od</span></body>']
© www.soinside.com 2019 - 2024. All rights reserved.