前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Python3填坑之旅]一·urllib模块网页爬虫访问中文网址出错

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

作者头像
小宋是呢
发布2019-06-27 11:43:15
1.9K0
发布2019-06-27 11:43:15
举报
文章被收录于专栏:深度应用

正在学习网页爬虫,用的Python3+urllib模块,当遇到链接里有中文字符的时候总是报错。之前以为是Python编码的问题,不断去尝试不同的编码去encode与decode,可以问题总是解决不了,没有办法继续查阅资料,最后发现其实解决方法特别简单。

  • 问题描述 当我访问带有中文字符的网址时总会报错:
代码语言:javascript
复制
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-11: ordinal not in range(128)

最开始以为编码问题,没有解决 源代码代码如下:

代码语言:javascript
复制
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()对中文字符串转换一下添加代码即可:
代码语言:javascript
复制
item = urllib.parse.quote(item)

但是要注意一点,只要对中文部分进行转换,如果链接全部转换也会报错:

代码语言:javascript
复制
ValueError: unknown url type: 'https%3A//baike.baidu.com/item/%E7%88%AC%E8%99%AB'

完整代码:

代码语言:javascript
复制
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)

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年10月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档