[Python3填坑之旅]1、urllib模块网页爬虫访问中文网址出错

正在学习网页爬虫,用的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)

今天又踩了这个坑,我把它填平了,希望后来者路平摊些
谢谢观看

猜你喜欢

转载自blog.csdn.net/xiaosongshine/article/details/83271062
今日推荐