[PYTHON] urllib2 유니 코드로 읽음
PYTHONurllib2 유니 코드로 읽음
나는 어떤 언어든지에있을 수있는 위치의 내용을 저장할 필요가있다. 그리고 유니 코드 문자열에 대한 내용을 검색 할 수 있어야합니다.
나는 다음과 같은 것을 시도했다.
import urllib2
req = urllib2.urlopen('http://lenta.ru')
content = req.read()
내용은 바이트 스트림이므로 유니 코드 문자열을 검색 할 수 있습니다.
urlopen을 할 때 헤더로부터 charset을 사용하여 내용을 디코딩하고 UTF-8로 인코딩하는 방법이 필요합니다.
해결법
-
==============================
1.수행 한 작업이 완료되면 다음과 같이 표시됩니다.
수행 한 작업이 완료되면 다음과 같이 표시됩니다.
>>> req.headers['content-type'] 'text/html; charset=windows-1251'
그래서 :
>>> encoding=req.headers['content-type'].split('charset=')[-1] >>> ucontent = unicode(content, encoding)
ucontent는 이제 유니 코드 문자열 (140655 자)입니다. 예를 들어 터미널이 UTF-8 인 경우 일부만 표시 할 수 있습니다.
>>> print ucontent[76:110].encode('utf-8') <title>Lenta.ru: Главное: </title>
그리고 당신은 등등을 검색 할 수 있습니다.
편집 : 유니 코드 입출력은 일반적으로 까다 롭습니다 (이것은 원래의 물음표를 붙잡고있는 것일 수 있습니다).하지만 대화식 파이썬 인터프리터에 유니 코드 문자열을 입력하는 어려운 문제를 우회하려고합니다. 일단 유니 코드 문자열이 올바르게 입력되면 (코드 포인트에 의해 수행됩니다 - 까다 롭지 만 까다 롭지는 않지만 ;-), 검색은 절대적으로 생각할 필요가 없습니다. (따라서 원래의 질문에 철저하게 답변되었습니다). 다시 UTF-8 단말기를 가정합니다.
>>> x=u'\u0413\u043b\u0430\u0432\u043d\u043e\u0435' >>> print x.encode('utf-8') Главное >>> x in ucontent True >>> ucontent.find(x) 93
참고 : 일부 사이트는 게재 된 문서 내에서 문자 인코딩 만 지정하므로 (예 : http-equiv 메타 태그 사용)이 방법은 모든 사이트에서 작동하지 않을 수 있습니다.
-
==============================
2.Content-Type http 헤더를 파싱하려면 cgi.parse_header 함수를 사용할 수 있습니다.
Content-Type http 헤더를 파싱하려면 cgi.parse_header 함수를 사용할 수 있습니다.
import cgi import urllib2 r = urllib2.urlopen('http://lenta.ru') _, params = cgi.parse_header(r.headers.get('Content-Type', '')) encoding = params.get('charset', 'utf-8') unicode_text = r.read().decode(encoding)
charset을 얻는 또 다른 방법은 다음과 같습니다.
>>> import urllib2 >>> r = urllib2.urlopen('http://lenta.ru') >>> r.headers.getparam('charset') 'utf-8'
또는 Python 3 :
>>> import urllib.request >>> r = urllib.request.urlopen('http://lenta.ru') >>> r.headers.get_content_charset() 'utf-8'
문자 인코딩은 HTML 문서 내에서 지정할 수도 있습니다 (예 : ).
from https://stackoverflow.com/questions/1020892/urllib2-read-to-unicode by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] python : urllib2 urlopen 요청으로 쿠키를 보내는 방법 (0) | 2018.10.09 |
---|---|
[PYTHON] 두 개의 정렬되지 않은 목록이 같은지 확인 [duplicate] (0) | 2018.10.09 |
[PYTHON] Numpy를 사용하여 파생 상품을 계산하려면 어떻게해야합니까? (0) | 2018.10.09 |
[PYTHON] Borg 패턴이 파이썬의 싱글 톤 패턴보다 나은 이유는 무엇입니까? (0) | 2018.10.09 |
[PYTHON] 파이썬 내에서 명령 행 프로그램 실행하기 [duplicate] (0) | 2018.10.09 |