Maison > Article > développement back-end > Problème de code tronqué lorsque Python capture et enregistre des pages HTML
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 :
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 !