문제

어떤 언어로든 사이트의 내용을 저장해야합니다. 그리고 유니 코드 문자열의 내용을 검색 할 수 있어야합니다.

나는 다음과 같은 것을 시도했습니다.

import urllib2

req = urllib2.urlopen('http://lenta.ru')
content = req.read()

내용은 바이트 스트림이므로 유니 코드 문자열을 검색 할 수 있습니다.

내가 할 때 어떤 방법이 필요합니다 urlopen 그런 다음 헤더의 숯을 사용하여 컨텐츠를 디코딩하고 UTF-8로 인코딩하도록 읽습니다.

도움이 되었습니까?

해결책

수행 한 작업 후에는 다음을 볼 수 있습니다.

>>> 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>

그리고 당신은 검색 등을 할 수 있습니다.

편집 : 유니 코드 I/O는 일반적으로 까다 롭다 (이것은 원래 요청자를 유지하는 것일 수 있음). 나는 유니 코드 문자열을 대화 형 파이썬 통역사 (원래 질문과 완전히 관련이 없음)에 입력하는 어려운 문제를 우회하여 방법을 보여줄 것입니다. 일단 유니 코드 문자열이 올바르게 입력되면 (코드 포인트로 수행하고 있습니다. 구피하지만 까다 롭지 않습니다 .-), 검색은 절대적으로 쉬운 일이 아닙니다 (따라서 원래 질문이 철저히 답변되었습니다). 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 메타 태그 사용).

다른 팁

구문 분석 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)

숯을 얻는 또 다른 방법 :

>>> 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 문서에도 지정할 수 있습니다. <meta charset="utf-8">.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top