Может ли селектор lxml / scrapy не передавать объекты html

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

Я уже пробовал 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 ответ

Согласно документам, в настоящее время .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>']
Другие вопросы по тегам