Python을 사용하여 HTML 페이지를 캡처하고 저장할 때 캡처한 웹페이지의 내용이 깨져 나오는 문제가 종종 발생합니다. 이 문제가 발생하는 이유는 한편으로는 자신의 코드에 있는 인코딩 설정에 문제가 있고, 다른 한편으로는 인코딩 설정이 올바른 경우 웹페이지의 실제 인코딩이 표시된 것과 일치하지 않기 때문입니다. 부호화. HTML 페이지에 표시된 인코딩은 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.
다음은 간단한 해결책입니다. chardet을 사용하여 웹 페이지의 실제 인코딩을 결정하는 동시에 표시를 결정합니다. URL 요청에서 반환된 정보를 인코딩합니다. 두 인코딩이 다른 경우 bs 모듈을 사용하여 GB18030 인코딩으로 확장하고, 동일한 경우 파일을 직접 작성합니다(여기에서는 시스템 기본 인코딩이 utf-8로 설정됨).
import urllib2 import sys import bs4 import chardet reload(sys) sys.setdefaultencoding('utf-8') def download(url): htmlfile = open('test.html','w') try: result = urllib2.urlopen(url) content = result.read() info = result.info() result.close() except Exception,e: print 'download error!!!' print e else: if content != None: charset1 = (chardet.detect(content))['encoding'] #real encoding type charset2 = info.getparam('charset') #declared encoding type print charset1,' ', charset2 # case1: charset is not None. if charset1 != None and charset2 != None and charset1.lower() != charset2.lower(): newcont = bs4.BeautifulSoup(content, from_encoding='GB18030') #coding: GB18030 for cont in newcont: htmlfile.write('%s\n'%cont) # case2: either charset is None, or charset is the same. else: #print sys.getdefaultencoding() htmlfile.write(content) #default coding: utf-8 htmlfile.close() if __name__ == "__main__": url = 'http://www.php.cn' download(url)
다음과 같이 획득한 test.html 파일이 열리면 UTF-8 BOM-free 인코딩 형식으로 저장되어 있는 것을 확인할 수 있습니다. 기본값은 우리가 설정합니다.
Python이 HTML 페이지를 가져와 저장할 때 왜곡된 코드 문제와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!