python2.7+ubuntu
用 beautifusoup 来解析一个网页,死活都输出不了中文
什么 encode,decode 试了个遍都不行啊
折腾了一下午.....
有过类似经验的 V 友们给点指导啊!
python2.7+ubuntu
用 beautifusoup 来解析一个网页,死活都输出不了中文
什么 encode,decode 试了个遍都不行啊
折腾了一下午.....
有过类似经验的 V 友们给点指导啊!
|
bakabieJan 18, 2016 via Android
1
检查下 ide 的编码设置是否正确。。。
我之前也是这样,在 pycharm 上无法输出中文。。。结果发现是 pycharm 内置编码没设置正确 |
|
flyer103Jan 18, 2016
2
黑魔法:
```python import sys reload(sys) sys.setdefaultencoding('utf-8') ``` |
|
yunyingJan 18, 2016
3
|
|
DuckJKJan 18, 2016
5
|
|
windfarerJan 18, 2016 via Android
6
先看网页的编码是什么,再在代码里做相应 decode
|
|
7
encode('utf-8').decode('unicode-escape')
送你神器 |
|
zaishanfengJan 18, 2016 via Android
8
楼上的几个方法我都用过 还是有问题 目前遇到的最好的解决方法是 django 的 smart_str
|
|
RqPS6rhmP3Nyn3TmJan 18, 2016
9
为什么不用 Python 3 呢,原生支持 utf-8
抓网页直接 decode('utf-8') 就好了 |
|
leavicJan 18, 2016
10
@Yourdaye pycharm 默认的 console encoding 是 UTF-8 ,而其他系统的的 console 不一定是这个,所以 console 输出的问题不是单纯靠编码能解决的。
|
|
12
@zaishanfeng 可惜我用的是 flask
|
|
13
|
|
RqPS6rhmP3Nyn3TmJan 18, 2016
14
@Yourdaye 没用过 2 ,不过现在都在慢慢迁移到 3 了,以后可能也不会填坑了吧
|
|
crayhuangJan 18, 2016
15
同样被折腾过,用了跟二楼一样的方法解决
|
|
16
1. 楼主你别用 urllib ,换 requests , resp.text 直接是 unicode , py2 py3 直接 print 都能看
2. 上 Python3 , py2 我们别管了 |
|
Victor215Jan 18, 2016
17
用 requests + chardet, 爬虫包治百病!
|
|
knightdfJan 18, 2016
18
全部用 unicode
|
|
yaozeyuan93Jan 18, 2016
19
先不用管 encode/decode 的事。
在程序开始时将编码设成 utf-8 ``` import sys reload(sys) sys.setdefaultencoding('utf-8') ``` 代码里凡是涉及到字符串的,一律使用 u''字符串。 对于外部输入,一律使用 decode 处理成 unicode 字符,确保程序内部是一个纯净的 unicode 字符环境 输出时,视情况 encode 成 utf-8 的 bytes 或者直接输出(让 python 系统自行处理)。 只要做到这些,一般就不会再碰见乱码问题了。 创意来源: Pycon2012 演讲, Unicode 之痛。中文翻译: https://github.com/PyCodersCN/PyCodersCN/blob/6d0c0607dfa609c443eaea5904789cf833ebc679/issue5/unipain.rst 我在自己的知乎助手( py2.7+urllib2+BS4 )里试了一下,很好用。目前为止还没有人向我反馈过乱码 bug |
|
weakiwiJan 18, 2016
20
有时候是 ide 自己的问题,建议直接 linux 环境 nano
|
|
ltmJan 18, 2016
21
你需要 python3
|
|
n6DD1A640Jan 18, 2016
22
反正能用 python 3 的地方我都用了。。
|
|
jok3rJan 18, 2016
23
暑假折腾过一次,用 Python3 解决,后来再转 Python2 ,却又没问题了。
前几天又折腾一次,折腾一晚上,结果发现网页开启了 gzip 压缩,需要先解压再解析。 |
|
zaishanfengJan 18, 2016 via Android
24
@Yourdaye 这个只是一个函数 可以 import 直接导入就能用 试过很多方法 什么 reload 什么 requests 什么 encode 有的情况上面的可以解决 但是很多时候试遍了还是不行 只有 smart_str 百试百灵
|
|
quietinJan 18, 2016
25
|
|
nooperJan 19, 2016 via iPad
26
py3
|
|
DelbertJan 19, 2016 via Android
27
用 requests 输出文件编码。我曾接解析过一个繁体中文网页差点没折腾死我,后来发现是 ISO1xxxx 编码……
|
|
fyJan 19, 2016
28
@Delbert requests 特定网页有一个问题,没记错的话是信任服务器反馈的 encoding 而不是 html 中指定的 encoding 。
不过这个函数官方也写了,我不懂他们为啥不默认开启 |
|
LINAICAIJan 19, 2016
29
还从来没遇到过编码问题没法解决的。。。别乱喷
|
|
limbo0Jan 19, 2016
30
方法是一律导成 unicode
|
|
popil1987Jan 19, 2016
31
由于你没有放出错误,所以说几处容易乱码的你参考一下。
1.确定获取的内容是字符串吗?有可能是 gzip 压缩的 2.用 chardet 检测获取内容的编码,或者存到文件中,用 file 命令查看文件编码 3.获取的内容要 decode 成 unicode 才能输出 4.存到文件要 encode 成某个编码 |
|
laobaoziJan 19, 2016 via iPhone
32
chardet +1
另外我还遇见过抓取的网页有一部分在终端显示不全,还以为网页是由 js 生成的,直到我把抓取的内容写入文件.... |
|
HackathonJan 19, 2016
33
|
|
ltypeJan 19, 2016
34
用 python3 啊
|
|
zhuangzhuang1988Jan 19, 2016
35
所以, 来学 c#吧..
|
|
straheJan 19, 2016
36
python3 从来不考虑这些问题
|
|
zkzipooJan 19, 2016
39
locale charmap
#coding:utf-8 怎么不把网页发过来 |
|
zkzipooJan 19, 2016
40
更正一下#coding=utf-8
|
|
picasso250Jan 19, 2016
41
请使用 PHP
|
|
fhefhJan 19, 2016
42
学习了~~
|
|
XuanYuanJan 19, 2016
44
我也是,被 ruby 的编码问题折腾得够呛。
问题是这样子的: 我现在有一个 utf-8 编码的文本,但是需要把它转换成 ASCII 格式,比如说,原来的“生”字要转换成“\u751F ”。 查了很多资料,还是一头雾水。 |
|
MemoryCornerJan 19, 2016
45
用 Python3, 用 Python3, 用 Python3, 早晚要用的。
|
|
46
@XuanYuan 这种在 python 里面叫 "unicode escape"
ruby 可以参考这个 http://stackoverflow.com/questions/5560914/how-do-i-escape-a-unicode-string-with-ruby puts '你好'.unpack('U*').map{ |i| "\\u" + i.to_s(16).rjust(4, '0') }.join |
|
49
@XuanYuan 用 gsub,自己把下面的正则替换成你自己想要的正则.
puts '你好 123abc'.gsub(/[\W]/){|s| s.unpack('U*').map{|i| "\\u" + i.to_s(16).rjust(4, '0')}.join } 正则可以参考这个 http://apidock.com/rails/v3.0.5/ActiveSupport/JSON/Encoding/escape/class |
|
XuanYuanJan 20, 2016
50
收到,谢谢!
我再好好学习一下。 |