今天刚入手学习 python 爬虫,用的是 python3.6。然后爬取网页时遇到一个编码的问题
在执行以下代码时: request = urllib.request.Request(url) print(request)
respOnse= urllib.request.urlopen(request, timeout=20) 出现了编码的问题,错误代码为: UnicodeEncodeError: 'ascii' codec can't encode characters in position 38-39: ordinal not in range(128)
个人觉得应该是页面中包含 Ascii 编码导致的,不知道该在哪个位置改编码。 谢谢大家
1 alvinbone88 2017-07-17 06:39:33 +08:00 试试在代码最前面加 #!/usr/bin/python # -*- coding: utf-8 -*- |
![]() | 2 Sylv 2017-07-17 07:07:10 +08:00 请提供具体网页 url。 |
3 popil1987 2017-07-17 08:51:52 +08:00 request.encoding=xxx |
![]() | 4 swordspoet 2017-07-17 09:27:05 +08:00 这个问题我之前也遇到过,并非是“页面中包含 Ascii 编码导致的”,而是因为编译器默认的编码形式是 Ascii,一般通过添加 reload(sys)然后 setdefaultencoding('utf8')。当然在开头还要照#1 楼做。供参考 |
![]() | 5 fy 2017-07-17 10:10:04 +08:00 一楼四楼认真的吗?这应该是网页的编码问题,不是代码的吧。 一个可能是都不出来(第一句错),另一个是输出不输出来(第二句错,比如 cmd 编码是 cp936,如果网页是 utf8 有些字符打不出来)。 建议提供更多信息。另外建议使用 requests |
6 zhangsen1992 2017-07-17 10:47:32 +08:00 requests 库多好啊 urllib 几乎没怎么用过 |
7 w1943 2017-07-17 12:22:14 +08:00 同意 5 楼,有可能是 cmd 编码和网页编码不一样 试试 respOnse= urllib.request.urlopen(request, timeout=20).decode('XXX') XXX 写你抓取网页的编码方式 实在不行 respOnse=unicode(urllib.request.urlopen(request, timeout=20),errors='replace') 会自动替换编码不出来的为'0xfff',应该可以解决。 另外推荐 requests 模块 |
8 ivechan 2017-07-17 13:05:54 +08:00 我猜你可能用的是 CMD ? |
9 gulangyu 2017-07-17 14:03:21 +08:00 via Android 你倒是把要爬的网页贴出来呀 |
![]() | 10 aidchow 2017-07-17 15:22:32 +08:00 via Android cmd ? |