关于python3.x版本 urllib修改过后遇到的几个问题

urllib 文档描述

因为特意在使用python3.x版本,所以在学习爬虫的时候经常会用到一些网上2.x版本的代码,总是报错,就很尴尬。这里列出一些已经遇到的问题,之后在遇到其他的还会有补充。
先引用官方文档列出一下python3.x 版本中urllib各部分的功能:

urllib is a package that collects several modules for working with URLs:

  1. urllib.request for opening and reading URLs 打开和阅读
  2. urllib.error containing the exceptions raised by urllib.request 包含意外和错误
  3. urllib.parse for parsing URLs 解析
  4. urllib.robotparser for parsing robots.txt files 解析robots.txt文件
    直译大概是这样:(
    文档连接
urlopen

首先就是urlopen,在2.x版本中,urlopen的使用方法如下:

import urllib2
url = 'http://www.abc.com'
response = urllib2.urlopen(url)

而在python3.x中urllib 和 urllib2 合并了。那么,这样说来应该写作:

import urllib
url ='http://www.abc.com'
response = urllib.urlopen(url)

但是,事实上会报出如下错误:

module ‘urllib’ has no attribute ‘urlopen’

因为urlopen并不在urllib模块中,而是被移动到了urllib.request中。这跟前面所提到的文档中写的是一致的,urllib.request是要用来打开和阅读连接。
这里必须要说明:

import urllib
urllib.request.urlopen()

报错(原因待查):

AttributeError: module ‘urllib’ has no attribute ‘request’

正确的做法是在import的时候必须注明:

import urllib.request

所以正确的代码段落如下所示:

import urllib.request
url = 'http://www.abc.com'
response = urllib.request.urlopen(url)
urlencode

在python2.x中urlencode的用法如下:

import urllib
url='http://www.abc.com'
values = {}
values['username']='abc'
values['password']='abc'
data = urllib.urlencode(values)

在python3.x中报错信息如下:

AttributeError: module ‘urllib’ has no attribute ‘urlencode’

在前面的介绍中写到urllib.parse是用来做url解析的,所以在这里urlencoding被移入了urllib.parse中。正确的写法为:

import urllib
values={}
values['username']='abc'
values['password']='abc'
data = urllib.parse.urlencode(values)

另外在抓取的时候经常会有人出现乱码的现象,除了常规文件头要加的那几个系统默认编码调整以外,在request.read()后面一定要加一个decode这样才能够正常显示中文。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值