2012-07-28 3 views
1

파이썬 2.7변환 HTML 소스의 콘텐츠

나는 웹 페이지의 소스 코드에서 비디오 타이틀을 얻을 수 있지만, 제목이 약간의 HTML 형식으로 인코딩되는 프로그램이 있습니다.

>>> import urllib2 
>>> urllib2.unquote('£') 
'£' 

그래서 작동하지 않았다 ... 가 그럼 난 시도 :

>>> import HTMLParser 
>>> h = HTMLParser.HTMLParser() 
>>> h.unescape('£') 
u'\xa3' 

해당하지 않는 볼 수

내가 지금까지 시도한 것입니다 둘 중 하나를 선택하거나 조합해서 사용할 수 없습니다.

나는 '£'이 HTML 문자 엔티티 이름이라는 것을 알아 냈습니다. '\ xa3'을 찾을 수 없었습니다.

사람이 어떻게하는 방법, 파이썬에서 읽을 수있는 형식으로 HTML 콘텐츠를 변환하는 방법을 알고 있습니까?

+0

BeautifulSoup을 확인하십시오. –

답변

1

£ 유니 코드 문자 U + 00A3 인 POUND SIGN의 HTML 문자 엔티티입니다. 당신이 그것을 인쇄 할 경우이 작업을 볼 수는 u'\xa3' 의미입니다 기본 유니 코드 문자의에

>>> print u'\xa3' 
£ 

당신이 unescape()를 사용

, 당신은 문자 엔티티를 변환 - 하나의 U + 00A3 유니 코드 문자를.

다른 형식으로이 인코딩하려는 경우 (예 : UTF-8), 당신은 문자열의 encode 방법으로 그렇게 할 것입니다 :

>>> u'\xa3'.encode('utf-8') 
'\xc2\xa3' 

당신은 단 하나 "파운드를 나타내는 2 바이트 문자열을 얻을 기호 "문자.

나는 문자열 인코딩이 일반적으로 어떻게 작동하는지에 대해 약간의 의문이 있다고 생각합니다. 바이트에서 유니 코드로 문자열을 변환해야합니다 (urllib2로이를 수행하는 방법 중 하나는 this answer을 참조하십시오). 그런 다음 html의 이스케이프 처리를 해제 한 다음 유니 코드를 필요한 출력 인코딩으로 변환하십시오.

1

비디오 제목 문자열은 앰퍼샌드 및 파운드 기호와 같은 특수 문자를 인코딩하는 데 HTML entities을 사용합니다.

\xa3pound sign (£)의 경우 파이썬 Unicode character literal입니다. 귀하의 예에서 파이썬은 Unicode 문자열의 __repr__()을 표시하고 있는데, 이는 이스케이프가 나타나는 이유입니다. 이 문자열을 인쇄하는 경우, 당신은 파운드 기호를 나타냅니다 볼 수 있습니다

>>> import HTMLParser 
>>> h = HTMLParser.HTMLParser() 
>>> h.unescape('£') 
u'\xa3' 
>>> print h.unescape('£') 
£ 
0

1xml, BeautifulSoup 또는 PyQuery가 작업을 잘 처리합니다. 또는 combination 개 중)