python抓取并保存html页面时乱码问题的解决方法


Posted in Python onJuly 01, 2016

本文实例讲述了python抓取并保存html页面时乱码问题的解决方法。分享给大家供大家参考,具体如下:

在用Python抓取html页面并保存的时候,经常出现抓取下来的网页内容是乱码的问题。出现该问题的原因一方面是自己的代码中编码设置有问题,另一方面是在编码设置正确的情况下,网页的实际编码和标示的编码不符合造成的。html页面标示的编码在这里:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

这里提供一种简单的办法解决:使用chardet判断网页的真实编码,同时从url请求返回的info判断标示编码。如果两种编码不同,则使用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 = 'https://3water.com'
  download(url)

得到的test.html文件打开如下,可以看到使用的是UTF-8无BOM编码格式存储的,也就是我们设置的默认编码:

python抓取并保存html页面时乱码问题的解决方法

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python在windows下实现备份程序实例
Jul 04 Python
python在windows命令行下输出彩色文字的方法
Mar 19 Python
操作Windows注册表的简单的Python程序制作教程
Apr 07 Python
Python中的元类编程入门指引
Apr 15 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
浅析Python pandas模块输出每行中间省略号问题
Jul 03 Python
python try 异常处理(史上最全)
Mar 07 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
python3.6编写的单元测试示例
Aug 17 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
Pytest allure 命令行参数的使用
Apr 18 Python
python处理html转义字符的方法详解
Jul 01 #Python
python简单读取大文件的方法
Jul 01 #Python
python编码总结(编码类型、格式、转码)
Jul 01 #Python
Python编码类型转换方法详解
Jul 01 #Python
Python面向对象编程中关于类和方法的学习笔记
Jun 30 #Python
Python中的time模块与datetime模块用法总结
Jun 30 #Python
详解Swift中属性的声明与作用
Jun 30 #Python
You might like
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
php加密解密字符串示例
2016/10/13 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
JSONP跨域请求
2017/03/02 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
Python装饰器基础详解
2016/03/09 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
python清理子进程机制剖析
2017/11/23 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
wxpython布局的实现方法
2019/11/01 Python
python爬虫容易学吗
2020/06/02 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
运动会四百米广播稿
2014/01/19 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
python入门学习关于for else的特殊特性讲解
2021/11/20 Python