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使用稀疏矩阵节省内存实例
Jun 27 Python
Python批量重命名同一文件夹下文件的方法
May 25 Python
python黑魔法之编码转换
Jan 25 Python
python图片验证码生成代码
Jul 02 Python
浅谈对yield的初步理解
May 29 Python
python3.5 email实现发送邮件功能
May 22 Python
python scrapy重复执行实现代码详解
Dec 28 Python
Python实现CNN的多通道输入实例
Jan 17 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 Python
用Python简陋模拟n阶魔方
Apr 17 Python
Python利用folium实现地图可视化
May 23 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高自定义性安全验证码代码
2011/11/27 PHP
PHP输出时间差函数代码
2013/01/28 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
Python的动态重新封装的教程
2015/04/11 Python
Python绘制3D图形
2018/05/03 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
2019/07/23 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
2014年效能监察工作总结
2014/11/21 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python