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

使用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;已转换,如何保持原样?

viktors 回答:lxml / scrapy选择器可以不传输html实体吗

根据文档,当前,.extract().getall()方法返回带有\xa0&nbsp;之类的unicode字符的原始html 。更多信息here

但是,.extract_first().get()方法仅返回列表中的第一个,并且输出为没有 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>']
本文链接:https://www.f2er.com/3156068.html

大家都在问