1
westy 2012-06-20 09:39:04 +08:00 1
百度的页面是GB2312编码的貌似。
|
3
hiwljun 2012-06-20 09:50:15 +08:00 1
试试用:
response = urllib2.urlopen('http://www.baidu.com').encode('gb2312') |
5
yangg 2012-06-20 10:04:21 +08:00 1
html = response.read().decode('gb2312');
|
9
alai 2012-06-20 10:39:15 +08:00 1
2009-04-15
关于抓取中文页面的一点小总结 - [python] 说起来简单,但也是经过好几个项目,来来回回出问题得出来的。 +最终转成UTF8输出是毋庸置疑的。 +抓的如果是中文页面的话,用GB18030来decode是比较正统的方法,gb2312是一个误区,其实我们的页面中使用的字符编码已经早就超出2312的那些了。 +明明是中文页面抓回来却没法用18030来decode的话,一般是因为页面中混杂了非法字符的原因,可以用ignore忽略掉非法字符。 |
10
alafeizai 2012-06-20 10:41:16 +08:00 1
ignore正解
|
11
liuxurong OP UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position 26408: illegal multibyte sequence
|
12
c 2012-06-20 10:59:16 +08:00 1
这年代了还用urllib2呀。 用requests吧,结果自动解码成unicode
>>> import requests >>> r = requests.get('http://www.baidu.com') >>> r.text .... >>> type(r.text) <type 'unicode'> |
13
c 2012-06-20 11:01:30 +08:00 1
BF也过时了,用pyquery吧。
>>> from pyquery import PyQuery as pq >>> html = pq(r.text) >>> print html('title').text() 百度一下,你就知道 |
15
tuoxie007 2012-06-20 11:55:49 +08:00 1
|
16
clowwindy 2012-06-20 12:14:00 +08:00 1
因为是 encode error,所以楼主是 print 的时候挂掉的,并且楼主一定在用简体中文 windows
解决方法就是改用 Cygwin,远离傻逼 windows 终端 |
18
INT21H 2012-06-20 12:33:02 +08:00 1
慢慢的就会发现BS的效率太低了,最后走上了re的不归路 =。=
|
19
ling0322 2012-06-20 12:44:22 +08:00 1
这个和控制台的编码(默认是GBK)有关吧, 在IDLE中运行没有问题
|
22
lddhbu 2013-04-19 19:28:43 +08:00
解决了我的问题
|