> 백엔드 개발 > 파이썬 튜토리얼 > Python으로 캡처한 잘못된 웹 페이지에 대한 이유와 해결 방법

Python으로 캡처한 잘못된 웹 페이지에 대한 이유와 해결 방법

不言
풀어 주다: 2019-03-16 10:13:27
앞으로
3637명이 탐색했습니다.

이 기사는 Python이 잘못된 웹 페이지를 크롤링하는 이유와 해결 방법을 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

python2를 사용하여 웹 페이지를 크롤링할 때 캡처된 콘텐츠가 왜곡된 문자로 표시되는 경우가 종종 있습니다.

이런 일이 발생할 가능성이 가장 높은 것은 인코딩 문제입니다. 실행 환경의 문자 인코딩이 웹 페이지의 문자 인코딩과 일치하지 않습니다.

예를 들어, utf-8로 인코딩된 웹사이트는 Windows 콘솔(gbk)에 캡처됩니다. 또는 Mac/Linux 터미널(utf-8)에서 gbk로 인코딩된 웹사이트를 스크랩하세요. 대부분의 웹 사이트는 UTF-8 인코딩을 사용하고 많은 사람들이 Windows를 사용하기 때문에 이러한 상황은 매우 일반적입니다.

캡처한 내용 중 영어, 숫자, 기호 등은 정확해 보이지만, 일부 왜곡된 문자가 섞여 있는 것을 발견하면 기본적으로는 그렇다고 결론 내릴 수 있습니다.

Python으로 캡처한 잘못된 웹 페이지에 대한 이유와 해결 방법

이 문제를 해결하는 방법은 먼저 웹 페이지의 인코딩 방식에 따라 결과를 유니코드로 디코딩한 후 출력하는 것입니다. 웹페이지의 인코딩이 확실하지 않은 경우 다음 코드를 참고할 수 있습니다.

import urllib
req = urllib.urlopen("http://some.web.site")
info = req.info()
charset = info.getparam('charset')
content = req.read()
print content.decode(charset, 'ignore')
로그인 후 복사

'ignore' 매개변수는 디코딩할 수 없는 문자를 무시하는 데 사용됩니다.

그러나 이 방법이 항상 작동하는 것은 아닙니다. 또 다른 방법은 정규 표현식을 통해 웹 페이지 코드의 인코딩 설정을 직접 일치시키는 것입니다:

<meta>
로그인 후 복사

인코딩 문제로 인해 문자가 깨져 보이는 것 외에도 종종 간과되는 또 다른 상황이 있는데, 바로 대상 웹 페이지에 gzip 압축이 있습니다. 활성화. 압축된 웹페이지는 더 적은 양의 데이터를 전송하고 더 빠르게 열립니다. 브라우저에서 열면 브라우저는 웹 페이지의 헤더 정보를 기반으로 자동으로 압축을 해제합니다. 그러나 코드로 직접 잡아내는 것은 그렇지 않습니다. 그러므로 웹페이지 주소를 열어보는 것은 맞지만 프로그램으로 크롤링하는 것은 왜 안되는지 헷갈릴 수도 있습니다. 나 자신도 이 문제에 속아 넘어간 적이 있다.

이 상황의 징후는 캡처된 콘텐츠가 거의 모두 왜곡되어 표시할 수도 없다는 것입니다.

웹 페이지에서 압축이 활성화되어 있는지 확인하고 압축을 풀려면 다음 코드를 참조할 수 있습니다.

import urllib
import gzip
from StringIO import StringIO
req = urllib.urlopen("http://some.web.site")
info = req.info()
encoding = info.getheader('Content-Encoding')
content = req.read()
if encoding == 'gzip':
    buf = StringIO(content)
    gf = gzip.GzipFile(fileobj=buf)
    content = gf.read()
print content
로그인 후 복사

교실 프로그래밍 예제 날씨 확인 시리즈(보기를 보려면 클릭)에서 이 두 가지 문제로 인해 꽤 많은 사람들이 어려움을 겪었습니다. . 여기서는 특별한 설명을 드리겠습니다.

마지막으로 소개하고 싶은 또 다른 "샤프 도구"가 있습니다. 처음부터 사용한다면 위의 두 가지 문제가 존재한다는 사실조차 인지하지 못할 것입니다.

이것은 요청 모듈입니다.

마찬가지로 웹페이지를 크롤링합니다.

import requests
print requests.get("http://some.web.site").text
로그인 후 복사

인코딩 문제나 압축 문제가 없습니다.

이것이 내가 Python을 좋아하는 이유입니다.

요청 모듈 설치 방법은 이전 기사를 참조하세요.

Python용 타사 모듈 설치 방법 - Crossin의 프로그래밍 교실 - Zhihu 칼럼

pip install requests
로그인 후 복사

위 내용은 Python으로 캡처한 잘못된 웹 페이지에 대한 이유와 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿