请教大家一个有关 Python3 爬虫时网页的编码问题

2017-07-16 23:38:00 +08:00
 Tidycc

今天刚入手学习 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 编码导致的,不知道该在哪个位置改编码。 谢谢大家

3834 次点击
所在节点    Python
10 条回复
alvinbone88
2017-07-17 06:39:33 +08:00
试试在代码最前面加
#!/usr/bin/python
# -*- coding: utf-8 -*-
Sylv
2017-07-17 07:07:10 +08:00
请提供具体网页 url。
popil1987
2017-07-17 08:51:52 +08:00
request.encoding=xxx
swordspoet
2017-07-17 09:27:05 +08:00
这个问题我之前也遇到过,并非是“页面中包含 Ascii 编码导致的”,而是因为编译器默认的编码形式是 Ascii,一般通过添加 reload(sys)然后 setdefaultencoding('utf8')。当然在开头还要照#1 楼做。供参考
fy
2017-07-17 10:10:04 +08:00
一楼四楼认真的吗?这应该是网页的编码问题,不是代码的吧。

一个可能是都不出来(第一句错),另一个是输出不输出来(第二句错,比如 cmd 编码是 cp936,如果网页是 utf8 有些字符打不出来)。

建议提供更多信息。另外建议使用 requests
zhangsen1992
2017-07-17 10:47:32 +08:00
requests 库多好啊 urllib 几乎没怎么用过
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 模块
ivechan
2017-07-17 13:05:54 +08:00
我猜你可能用的是 CMD ?
gulangyu
2017-07-17 14:03:21 +08:00
你倒是把要爬的网页贴出来呀
aidchow
2017-07-17 15:22:32 +08:00
cmd ?

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

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

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

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

© 2021 V2EX