python使用beautifulsoup乱码问题
黄舟
黄舟 2017-04-17 17:39:39
[Python讨论组]

使用BeautifulSoup中的find_all方法输出中文乱码,为ASCII码,但输出是一个对象,不能使用decode()encode(),不知该如何转换
代码如下:

#coding:utf-8

import urllib2
from sgmllib import SGMLParser
from bs4 import BeautifulSoup
import re
import sys  

reload(sys)  
sys.setdefaultencoding('utf8')   
soup=BeautifulSoup(open('test.html'),"lxml")
s=soup.find_all("title")
print s

输出如下:

[<title>\n    \u91cd\u5e86 - \u5728\u7ebf\u8d2d\u7968&amp;\u5f71\u8baf\n</title>]
[Finished in 0.7s]

当使用decode()方法时,报错如下:

Traceback (most recent call last):
  File "G:\Work\code\python\3.py", line 13, in <module>
    print s.decode()
AttributeError: 'ResultSet' object has no attribute 'decode'
[Finished in 0.8s with exit code 1]

在官方文档中也有这么一句话:

如果传入字节码参数,Beautiful Soup会当作UTF-8编码,可以传入一段Unicode 编码来避免Beautiful Soup解析编码出错

小白一枚,实在不知该如何该如何传入一段Unicode 编码来避免Beautiful Soup解析编码出错,希望有大神告知,感激不敬!

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(4)
天蓬老师

这个跟beautifulsoup没关系,而是跟输出列表有关系,python列表里面不能输出汉字,只能单独输出,另外你的并不是乱码,结果是正确的, 只是unicode的编码。改成这样试试:

s=soup.find_all("title")
print s[0].encode('utf-8')
伊谢尔伦

是open的问题。

PHP中文网

用get_text()方法也可以:
s = soup.find_all("title").get_text()
print s

高洛峰

Thanks for @shomy , it is work for me.

https://github.com/chusiang/c...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号