python3中为什么没有urlparse.urljoin?
python3对urllib和urllib2进行了重构,拆分成了urllib.request, urllib.response, urllib.parse, urllib.error等几个子模块,这样的架构从逻辑和结构上说更加合理。
urljoin现在对应的函数是urllib.parse.urljoin
python3中的urlopen对于中文url是如何处理的?
urllib.request.urlopen('http://www.sina.com.cn'),如果url中有中文怎么办,Python3不是默认采用utf-8编码的吗?
刚刚看了urllib.parse.quote()的定义,完全可以直接处理中英混排的url,无需单独处理中文再拼接。具体方法:
# -*- coding:utf-8 -*-from urllib.parse import quoteurl = 'http://www.example.com/api.php?text=中文在这里'# 不带附加参数print('\n不带附加参数:\n%s' % quote(url))# 附带不转换字符参数print('\n附加不转换字符参数:\n%s' % quote(url, safe='/:?='))
运行结果:
不带附加参数:
http%3A//www.example.com/api.php%3Ftext%3D%E4%B8%AD%E6%96%87%E5%9C%A8%E8%BF%99%E9%87%8C
附加不转换字符参数:
http://www.example.com/api.php?text=%E4%B8%AD%E6%96%87%E5%9C%A8%E8%BF%99%E9%87%8C
quote可用的参数如下:
quote(string, safe='/', encoding=None, errors=None)
其中的safe参数可用的范围:
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
这样对于爬取来的混合中文的url可以直接处理了。