今天刚入手学习 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 ?
|