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.
'IT Share you' 카테고리의 다른 글
Docker에서 여러 터미널을 여는 방법은 무엇입니까? (0) | 2020.12.10 |
---|---|
ListBox.items를 일반 목록으로 변환하는 가장 간결한 방법 (0) | 2020.12.10 |
변수가 초기화되지 않았을 수 있음 오류 (0) | 2020.12.09 |
Javascript로 2 자리 연도를 얻는 방법은 무엇입니까? (0) | 2020.12.09 |
GNU sed 및 BSD / OSX sed 모두에서 작업하려면 내부 편집을 위해 sed -i 명령이 필요합니다. (0) | 2020.12.09 |