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实现抓取城市的PM2.5浓度和排名
Mar 19 Python
轻松实现python搭建微信公众平台
Feb 16 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
利用Python开发微信支付的注意事项
Aug 19 Python
python实现简单中文词频统计示例
Nov 08 Python
Python找出最小的K个数实例代码
Jan 04 Python
python中的随机函数小结
Jan 27 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
Python Subprocess模块原理及实例
Aug 26 Python
Python函数的默认参数设计示例详解
Dec 01 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
详细分析Python collections工具库
Jul 16 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 access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
PHP如何实现跨域
2016/05/30 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
jQuery实现广告条滚动效果
2017/08/22 jQuery
javascript 面向对象实战思想分享
2017/09/07 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
Python进程池Pool应用实例分析
2019/11/27 Python
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
医药代表个人求职信范本
2013/12/19 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
实习公司领导推荐函
2014/05/21 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
pycharm无法安装cv2模块问题
2022/05/20 Python
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript