Python BeautifulSoup中文乱码问题的2种解决方法


Posted in Python onApril 22, 2014

解决方法一:

使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输出的总是乱码,找了好久找到解决办法,下面分享给大家
首先是代码

from bs4 import BeautifulSoup
import urllib2url = 'https://3water.com/'
page = urllib2.urlopen(url)
soup = BeautifulSoup(page,from_encoding="utf8")
print soup.original_encoding
print (soup.title).encode('gb18030')
file = open("title.txt","w")
file.write(str(soup.title))
file.close()
 
for link in soup.find_all('a'):
    print link['href']

在刚开始测试的时候发现,虽然输出是乱码的,但是写在文件里面却是正常的.然后在网上找了找解决办法才发现
print一个对象的逻辑:内部是调用对象的__str__得到对应的字符串的,此处对应的是soup的__str__ 而针对于soup本身,其实已经是Unicode编码,所以可以通过指定__str__输出时的编码为GBK,以使得此处正确显示非乱码的中文
而对于cmd:(中文的系统中)编码为GBK,所以只要重新编码为gb18030就可以正常输出了
就是下面这行代码
print (soup.title).encode('gb18030')

解决方法二:

BeautifulSoup在解析utf-8编码的网页时,如果不指定fromEncoding或者将fromEncoding指定为utf-8会出现中文乱码的现象。

解决此问题的方法是将Beautifulsoup构造函数中的fromEncoding参数的值指定为:gb18030

import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen('https://3water.com/');
soup = BeautifulSoup(page,fromEncoding="gb18030")
print soup.originalEncoding
print soup.prettify()
Python 相关文章推荐
python中的__slots__使用示例
Feb 26 Python
Python实现二分查找算法实例
May 26 Python
Python内置函数OCT详解
Nov 09 Python
python 设置文件编码格式的实现方法
Dec 21 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
使用Python实现图像标记点的坐标输出功能
Aug 14 Python
基于Python和PyYAML读取yaml配置文件数据
Jan 13 Python
Python实现井字棋小游戏
Mar 09 Python
在python image 中实现安装中文字体
May 16 Python
python 生成器需注意的小问题
Sep 29 Python
用Python简陋模拟n阶魔方
Apr 17 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 Python
python中使用smtplib和email模块发送邮件实例
Apr 22 #Python
python用字典统计单词或汉字词个数示例
Apr 22 #Python
python实现rest请求api示例
Apr 22 #Python
python 七种邮件内容发送方法实例
Apr 22 #Python
sqlalchemy对象转dict的示例
Apr 22 #Python
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 #Python
python实现linux服务器批量修改密码并生成execl
Apr 22 #Python
You might like
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
javascript中eval函数用法分析
2015/04/25 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
AngularJS中比较两个数组是否相同
2016/08/24 Javascript
RequireJs的使用详解
2017/02/19 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
在Django的模型中添加自定义方法的示例
2015/07/21 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
Python 列表反转显示的四种方法
2020/11/16 Python
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
教师个人自我评价范文
2014/04/13 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
最新离婚协议书范本
2014/08/19 职场文书
就业协议书
2014/09/12 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书