IT Share you

Python 3.1에서 문자열의 HTML 엔티티를 어떻게 이스케이프 해제합니까?

shareyou 2020. 12. 9. 22:00
반응형

Python 3.1에서 문자열의 HTML 엔티티를 어떻게 이스케이프 해제합니까?


이 질문에 이미 답변이 있습니다.

나는 주위를 둘러 보았고 python 2.6 및 이전 버전에 대한 솔루션 만 찾았으며 python 3.X 에서이 작업을 수행하는 방법은 없습니다. (나는 Win7 상자에만 액세스 할 수 있습니다.)

3.1에서이 작업을 수행 할 수 있어야하며 외부 라이브러리없이 가능해야합니다. 현재 httplib2가 설치되어 있고 명령 프롬프트 컬에 액세스 할 수 있습니다 (이것이 페이지에 대한 소스 코드를 얻는 방법입니다). 불행히도 curl은 내가 아는 한 html 엔티티를 디코딩하지 않습니다. 문서에서 디코딩 명령을 찾을 수 없습니다.

예, 저는 3.X에서 성공하지 못한 채 여러 번 Beautiful Soup을 작동 시키려고 노력했습니다. MS Windows 환경의 python 3에서 작동하도록하는 방법에 대한 EXPLICIT 지침을 제공 할 수 있다면 매우 감사하겠습니다.

따라서 명확하게하기 위해 다음과 같은 Suzy & John문자열을 "Suzy & John"과 같은 문자열로 바꿔야합니다 .


html.unescape 함수를 사용할 수 있습니다 .

에서 Python3.4 + (업데이트에 대한 JF 세바스찬 덕분에) :

import html
html.unescape('Suzy & John')
# 'Suzy & John'

html.unescape('"')
# '"'

에서 Python3.3 이상 :

import html.parser    
html.parser.HTMLParser().unescape('Suzy & John')

에서 Python2 :

import HTMLParser
HTMLParser.HTMLParser().unescape('Suzy & John')

xml.sax.saxutils.unescape이 목적으로 사용할 수 있습니다 . 이 모듈은 Python 표준 라이브러리에 포함되어 있으며 Python 2.x와 Python 3.x간에 이식 가능합니다.

>>> import xml.sax.saxutils as saxutils
>>> saxutils.unescape("Suzy & John")
'Suzy & John'

분명히 나는 ​​이것을 게시하는 것 외에는 아무 일도 할 수 없을 정도로 명성이 높지 않습니다. unutbu의 대답은 인용문을 지우지 않습니다. 내가 찾은 유일한 것은이 기능이었습니다.

import re
from htmlentitydefs import name2codepoint as n2cp

def decodeHtmlentities(string):
    def substitute_entity(match):        
        ent = match.group(2)
        if match.group(1) == "#":
            return unichr(int(ent))
        else:
            cp = n2cp.get(ent)
            if cp:
                return unichr(cp)
            else:
                return match.group()
    entity_re = re.compile("&(#?)(\d{1,5}|\w{1,8});")
    return entity_re.subn(substitute_entity, string)[0]

페이지 에서 가져온 것 입니다.


Python 3.x에는 html.entities 도 있습니다.


제 경우에는 as3 이스케이프 함수에서 이스케이프 된 html 문자열이 있습니다. 한 시간 동안 인터넷 검색이 유용한 것을 찾지 못했기 때문에이 반향 함수를 작성하여 필요에 맞게 제공했습니다. 여기있어,

def unescape(string):
    index = string.find("%")
    if index == -1:
        return string
    else:
        #if it is escaped unicode character do different decoding
        if string[index+1:index+2] == 'u':
            replace_with = ("\\"+string[index+1:index+6]).decode('unicode_escape')
            string = string.replace(string[index:index+6],replace_with)
        else:
            replace_with = string[index+1:index+3].decode('hex')
            string = string.replace(string[index:index+3],replace_with)
        return unescape(string)

Edit-1 유니 코드 문자를 처리하는 기능이 추가되었습니다.


이것이 내장 라이브러리인지 확실하지 않지만 3.1이 필요하고 지원하는 것처럼 보입니다.

출처 : http://docs.python.org/3.1/library/xml.sax.utils.html?highlight=html%20unescape

xml.sax.saxutils.unescape(data, entities={}) Unescape '&', '<', and '>' in a string of data.

참고URL : https://stackoverflow.com/questions/2360598/how-do-i-unescape-html-entities-in-a-string-in-python-3-1

반응형