이 기사는 Python이 잘못된 웹 페이지를 크롤링하는 이유와 해결 방법을 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
python2를 사용하여 웹 페이지를 크롤링할 때 캡처된 콘텐츠가 왜곡된 문자로 표시되는 경우가 종종 있습니다.
이런 일이 발생할 가능성이 가장 높은 것은 인코딩 문제입니다. 실행 환경의 문자 인코딩이 웹 페이지의 문자 인코딩과 일치하지 않습니다.
예를 들어, utf-8로 인코딩된 웹사이트는 Windows 콘솔(gbk)에 캡처됩니다. 또는 Mac/Linux 터미널(utf-8)에서 gbk로 인코딩된 웹사이트를 스크랩하세요. 대부분의 웹 사이트는 UTF-8 인코딩을 사용하고 많은 사람들이 Windows를 사용하기 때문에 이러한 상황은 매우 일반적입니다.
캡처한 내용 중 영어, 숫자, 기호 등은 정확해 보이지만, 일부 왜곡된 문자가 섞여 있는 것을 발견하면 기본적으로는 그렇다고 결론 내릴 수 있습니다.
이 문제를 해결하는 방법은 먼저 웹 페이지의 인코딩 방식에 따라 결과를 유니코드로 디코딩한 후 출력하는 것입니다. 웹페이지의 인코딩이 확실하지 않은 경우 다음 코드를 참고할 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!