Maison  >  Article  >  développement back-end  >  Problème de code tronqué lorsque Python capture et enregistre des pages HTML

Problème de code tronqué lorsque Python capture et enregistre des pages HTML

高洛峰
高洛峰original
2017-03-01 13:25:221650parcourir

Lorsque vous utilisez Python pour capturer des pages HTML et les enregistrer, il arrive souvent que le contenu des pages Web capturées soit tronqué. La raison de ce problème est que d'une part, il y a un problème avec les paramètres d'encodage dans votre propre code, et d'autre part, lorsque les paramètres d'encodage sont corrects, l'encodage réel de la page Web ne correspond pas à celui marqué. codage. L'encodage marqué sur la page html est ici :

Copiez le code Le code est le suivant :

Voici une solution simple : utilisez chardet pour déterminer le véritable encodage de la page web, et en même temps déterminer le marquage encodage à partir des informations renvoyées par la requête url. Si les deux encodages sont différents, utilisez le module bs pour passer à l'encodage GB18030 ; s'ils sont identiques, écrivez le fichier directement (l'encodage par défaut du système est défini ici sur 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)

Le fichier test.html obtenu est ouvert comme suit. Vous pouvez voir qu'il est stocké au format d'encodage sans nomenclature UTF-8, qui. c'est ce que nous avons défini L'encodage par défaut :

Problème de code tronqué lorsque Python capture et enregistre des pages HTML

Pour plus d'articles liés au problème de code tronqué lorsque python explore et enregistre des pages html, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn