正在学习网页爬虫,用的Python3+urllib模块,当遇到链接里有中文字符的时候总是报错。之前以为是Python编码的问题,不断去尝试不同的编码去encode与decode,可以问题总是解决不了,没有办法继续查阅资料,最后发现其实解决方法特别简单。
- 问题描述
当我访问带有中文字符的网址时总会报错:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-11: ordinal not in range(128)
最开始以为编码问题,没有解决
源代码代码如下:
import urllib
rooturl = "https://baike.baidu.com/item/"
item = "爬虫"
url = rooturl+item
print(url)
request = urllib.request.Request(url=url)
reponse = urllib.request.urlopen(request)
result = reponse.read()
result = str(result, encoding="utf-8")
print(result)
- 解决方法
最后找到了问题,就是应为中文“爬虫”出的问题,却不是编码问题。
原来是Python3的urllib模块urllib.request.Request()方法中无法处理带有中文字符的链接,需要通过urllib.parse.quote()对中文字符串转换一下添加代码即可:
item = urllib.parse.quote(item)
但是要注意一点,只要对中文部分进行转换,如果链接全部转换也会报错:
ValueError: unknown url type: 'https%3A//baike.baidu.com/item/%E7%88%AC%E8%99%AB'
完整代码:
import urllib
rooturl = "https://baike.baidu.com/item/"
item = "爬虫"
item = urllib.parse.quote(item)
url = rooturl+item
print(url)
request = urllib.request.Request(url=url)
reponse = urllib.request.urlopen(request)
result = reponse.read()
result = str(result, encoding="utf-8")
print(result)
今天又踩了这个坑,我把它填平了,希望后来者路平摊些
谢谢观看