python2.x 在 python3.x 中的变动整理

   1. python 中的urllib2  变为在python 中  用urllib

    2.python2.x urlparse.urljoin() 变为 python3.x urllib.parse.urljoin()

   3.用python写爬虫程序的时候经常使用的库肯定是urllib,除此之外,还有urllib2和cookielib等,但是由于python版本的更新,在一些库和方法的使用上python3并不能向下兼容。所以在写爬虫程序时并不能按照python2的引用方法。

        现将urllib等方法的引用方法归纳如下(以python3.4为例,是否会适用python3.2等版本不可知):首先,python3.4中,而是将urllib2、urlparse、robotparser并入了urllib模块,并且修改了urllib模块,其中包含了5个子模块,每个子模块中的常用方法如下:urllib.error: ContentTooShortError;URLError;HTTPErrorurllib.parse:urlparse;_splitparams;urlsplit;urlunparse;urlunsplit;urljoin;urldefrag;unquote_to_bytes;unquote;parse_qs;parse_qsl;unquote_plus;quote;quote_plus;quote_from_bytes;urlencode;to_bytes;unwrap;splittype;splithost;splituser;splitpasswd;splitport等;urllib.request: urlopen; install_opener; urlretrieve; urlcleanup; request_host; build_opener; _parse_proxy; parse_keqv_list; parse_http_list; _safe_gethostbyname; ftperrors; noheaders; getproxies_environment; proxy_bypass_environment; _proxy_bypass_macosx_sysconf; Requesturllib.response: addbase; addclosehook; addinfo;addinfourl;urllib.robotparser:

        RobotFileParser以上方法并没有列举完全,具体的每个子块的所有类和方法可以在python安装包里的Lib/urllib下查询(如果不是python3.4.3版本的python版本,可以到这个目录下面查询相应的方法。)另外,python2中的cookielib,在python3.4中重命名为http.cookiejar. 引用时直接import http.cookiejar 即可。最后,由于python3严格区分bytes和str类型,并且这两种类型不能以任意隐式方式使用,但是urllib中的有些方法对于str和bytes有严格的规定,

    比如下面这段代码:values{}values['username']="";values['password']="";data=urllib.parse.urlencode(values)url="http://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"request=urllib.request.Request(url,data)response=urllib.request.urlopen(request)print(response.read().decode('utf-8'))

          这段代码在python3.4上运行时会报错:“TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.”这句话的意思就是说:urllib.request.Request(url,data)中的data必须是bytes类型,但是urllib.parse.urlencode(values)产生的data的类型是str,所以遇到这种情况就需要进行str和bytes的转化:从str到bytes:调用方法encode('utf-8'). 所以,上边代码需要改写成:data=urllib.parse.urlencode(values).encode('utf-8')从bytes到str:调用方法decode('utf-8').

你可能感兴趣的:(python2.x 在 python3.x 中的变动整理)