Декодирование объектов HTML с Python

Это - большой ресурс, чтобы начать изучать, как создать расширение FireFox:
, Как создать расширения Firefox

, Это - потрясающее учебное руководство, и будут покрытия большая часть типа расширений.

Редактирование: Обновленная ссылка для использования заархивированной копии начиная с исходной страницы больше не существует

18
задан Triptych 30 July 2009 в 19:50
поделиться

3 ответа

Попробуйте следующее:

import re

def _callback(matches):
    id = matches.group(1)
    try:
        return unichr(int(id))
    except:
        return id

def decode_unicode_references(data):
    return re.sub("&#(\d+)(;|(?=\s))", _callback, data)

data = "U.S. Adviser’s Blunt Memo on Iraq: Time ‘to Go Home’"
print decode_unicode_references(data)
6
ответ дан 30 November 2019 в 05:58
поделиться

Это действительно работает:

from BeautifulSoup import BeautifulStoneSoup
s = "U.S. Adviser’s Blunt Memo on Iraq: Time ‘to Go Home’"
decoded = BeautifulStoneSoup(s, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)

Если вам нужна строка вместо объекта Unicode, вам нужно будет декодировать ее в кодировку, которая поддерживает используемые символы; В ISO-8859-1 нет:

result = decoded.encode("UTF-8")

К сожалению, вам нужен внешний модуль для чего-то вроде этого; простое декодирование сущностей HTML / XML должно быть в стандартной библиотеке и не требовать от меня использования библиотеки с бессмысленными именами классов, такими как BeautifulStoneSoup. (Имена классов и функций не должны быть "творческими", они должны иметь смысл.)

18
ответ дан 30 November 2019 в 05:58
поделиться

На самом деле у вас нет HTML-сущностей. Есть ТРИ разновидности тех & .....; штучки - например & # 160; & # xa0; & nbsp; все означают U + 00A0 ПРОБЕЛ БЕЗ РАЗРЫВА.

& # 160; (тип, который у вас есть) - это "ссылка на числовой символ" (десятичный).
& # xa0; - это «цифровая символьная ссылка» (шестнадцатеричная).
& nbsp; - это объект.

Дополнительная литература: http://htmlhelp.com/reference/html40/entities/

Здесь вы найдете код для Python2.x, который выполняет все три сканирования за один прием: http : //effbot.org/zone/re-sub.htm#unescape-html

20
ответ дан 30 November 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: