Может ли селектор lxml / scrapy не передавать html-сущности - PullRequest
1 голос
/ 06 ноября 2019

Как получить исходные html-сущности после использования селектора lxml / scrapy xpath?

Я уже пробовал 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; обратился, как сохранить их как есть?

1 Ответ

1 голос
/ 06 ноября 2019

Согласно документам, в настоящее время методы .extract() и .getall() возвращают необработанный html с символами юникода, такими как \xa0, то есть &nbsp;. Подробнее здесь .

Однако методы .extract_first() и .get() возвращают только первое в списке, и выводом является без символов Юникода. ( Документы )

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>']
...