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实现堆栈与队列的方法
Jan 15 Python
python自定义类并使用的方法
May 07 Python
利用python实现数据分析
Jan 11 Python
Python实现曲线点抽稀算法的示例
Oct 12 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
python 定时器,轮询定时器的实例
Feb 20 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
Python3分析处理声音数据的例子
Aug 27 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
Selenium alert 弹窗处理的示例代码
Aug 06 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 29 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中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
解析php取整的几种方式
2013/06/25 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
sae使用smarty模板的方法
2013/12/17 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
js中top的作用深入剖析
2014/03/04 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
javascript表单正则应用
2017/02/04 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
NumPy统计函数的实现方法
2020/01/21 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
广告学毕业生求职信
2014/01/30 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
入队仪式主持词
2015/07/04 职场文书
2016年元旦寄语
2015/08/17 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书
Python数据类型最全知识总结
2021/05/31 Python
分享Python获取本机IP地址的几种方法
2022/03/17 Python