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引用(import)文件夹下的py文件的方法
Aug 26 Python
python字典排序实例详解
May 20 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
Python2随机数列生成器简单实例
Sep 04 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
numpy matrix和array的乘和加实例
Jun 28 Python
python使用zip将list转为json的方法
Dec 31 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
python 实现Requests发送带cookies的请求
Feb 08 Python
python+opencv实现目标跟踪过程
Jun 21 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下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
简单的Python调度器Schedule详解
2019/08/30 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
视图的作用
2014/12/19 面试题
离婚协议书范本样本
2014/08/19 职场文书
会计求职自荐信范文
2015/03/04 职场文书
停水通知
2015/04/16 职场文书
车位出租协议书范本
2016/03/19 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript