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 相关文章推荐
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
django 解决manage.py migrate无效的问题
May 27 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
在mac下查找python包存放路径site-packages的实现方法
Nov 06 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 Python
使用Python进行防病毒免杀解析
Dec 13 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
Python列表推导式实现代码实例
Sep 09 Python
python 如何对logging日志封装
Dec 02 Python
详解Python Celery和RabbitMQ实战教程
Jan 20 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如何透过ODBC来存取数据库
2006/10/09 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
php验证码实现代码(3种)
2015/09/07 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
js中符号转意问题示例探讨
2013/08/19 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
Django框架中的对象列表视图使用示例
2015/07/21 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
python实现Adapter模式实例代码
2018/02/09 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
Numpy的简单用法小结
2019/08/28 Python
详解python破解zip文件密码的方法
2020/01/13 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
详解Python 中的容器 collections
2020/08/17 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
工程现场管理求职自荐信
2013/10/02 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
道德模范先进事迹
2014/02/14 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers