>  기사  >  백엔드 개발  >  Python이 HTML 페이지를 잡고 저장할 때 문자가 깨집니다.

Python이 HTML 페이지를 잡고 저장할 때 문자가 깨집니다.

高洛峰
高洛峰원래의
2017-03-01 13:25:221650검색

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 페이지를 잡고 저장할 때 문자가 깨집니다.

Python이 HTML 페이지를 가져와 저장할 때 왜곡된 코드 문제와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.