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进行稳定可靠的文件操作详解
Dec 31 Python
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
Python socket编程实例详解
May 27 Python
Python实现注册登录系统
Aug 08 Python
浅析python继承与多重继承
Sep 13 Python
Python提取频域特征知识点浅析
Mar 04 Python
Python+redis通过限流保护高并发系统
Apr 15 Python
Python之变量类型和if判断方式
May 05 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
python使用Word2Vec进行情感分析解析
Jul 31 Python
python识别验证码的思路及解决方案
Sep 13 Python
python某漫画app逆向
Mar 31 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设置编码格式的方法
2013/03/05 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
php实现微信发红包
2015/12/05 PHP
深入浅析php json 格式控制
2015/12/24 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
浅析Git版本控制器使用
2017/12/10 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
python交易记录链的实现过程详解
2019/07/03 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
《最后的姿势》教学反思
2014/02/27 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
部门主管竞聘书
2015/09/15 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
Python经常使用的一些内置函数
2022/04/11 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python