学 python 遇到个问题

2015-04-18 02:57:09 +08:00
 vimutt
初学python,照网上爬虫教程练习,
网页来源编码如果是gb2312下面的代码就没问题,如果是utf8编码,就出现错误提示:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
请问我该如何处理呢
==============================
import HTMLParser
....................

request = urllib2.Request (Url)
m = urllib2.urlopen(request)
con = m.read()
my.feed(con)
==============================
2679 次点击
所在节点    Python
8 条回复
vy0b0x
2015-04-18 03:13:40 +08:00
'awefa'.decode('utf8')
vimutt
2015-04-18 03:22:06 +08:00
@vy0b0x 我试过con.decode('UTF8') 虽然不提示出错信息了 但是htmlparser 却不输出对网页提取信息的内容 但是gb2312的网页却可以正常提取
linkiosk
2015-04-18 07:25:43 +08:00
reload(sys)
设置默认编码
vimutt
2015-04-18 11:23:08 +08:00
@linkiosk 这个也试了 设置默认编码为utf8 不提示出错了,但是htmlparser 依然不输出任何结果 但是gb2312的网页却可以
vimutt
2015-04-18 12:22:16 +08:00
完整代码如下 :我又用v2ex试了下 虽然都是utf8编码 ,v2ex就可以输出结果,我想爬的这个站就不行 麻烦各位帮忙看看:
# -*- coding:utf-8 -*-
import urllib2
import HTMLParser

class MyParser(HTMLParser.HTMLParser):

def __init__(self):
HTMLParser.HTMLParser.__init__(self)

def handle_starttag(self, tag, attrs):
if tag == 'a':
for name, value in attrs:
if name == 'href':
print value


my = MyParser()
Url = 'http://blog.sina.com.cn/s/articlelist_1743100694_0_1.html/'
Url2 = 'https://v2ex.com/'

print 'Url:',Url
request = urllib2.Request (Url)
m = urllib2.urlopen(request)
con = m.read()
my.feed(con.decode('utf-8'))
bugcoder
2015-04-18 14:29:09 +08:00
@vimutt
测试了一下,要去掉评论
pattern = r"<!.*>"
con = re.sub(pattern, '', m.read().decode('utf-8'))
vy0b0x
2015-04-18 14:56:45 +08:00
@vimutt v2ex能输出别的不能输出那就不是编码的事 是解析器的事 你换个解析器 有个HTML5的解析器 纯PYTHON实现的 容错是现有最好的 就是比较慢 还有 推荐用BEAUTIFULSOUP来做这事
vimutt
2015-04-18 15:23:48 +08:00
@bugcoder
@vy0b0x
感谢 我去试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/184481

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX