urllib.parse模块定义的函数有两大类别分别为《解析类别》和《转码类别》
《解析类别有》
1.urllib.parse.urlparse 《分割urlparse里指定的URL,将其分割为scheme,netloc,params,query,fragment,可设置fragment参数指定是否显示fragment》
例:
result = urllib.parse.urlparse("https://www.jianshu.com/writer#/notebooks/52963477/notes/104310197/preview")
result2 = urllib.parse.urlparse("https://www.jianshu.com/writer#/notebooks/52963477/notes/104310197/preview",allow_fragments=False)
print(result,result2)
result输出
scheme='https', netloc='www.jianshu.com', path='/writer', params='', query='', fragment='/notebooks/52963477/notes/104310197/preview'
result2输出
scheme='https', netloc='www.jianshu.com', path='/writer#/notebooks/52963477/notes/104310197/preview', params='', query='', fragment=''
2.urllib.parse.urlunparse 《与urlparse相反,此函数为构造URL,接受一个可迭代对象,且该对象长度必须为6》
例:
url = ['https','www.jianshu.com','writer','','','/notebooks/52963477/notes/104310197/preview']
result = urllib.parse.urlunparse(url)
print(result)
3.urllib.parse.urlsplit 《与urlparse类似,但params对象和path对象一同显示》
4.urllib.parse.urlunsplit 《与urlunparse类似,但接受的可迭代对象长度必须为5,缺少了parmas对象》
5.urllib.parse.urljoin 《合并基准URL和参数URL》
例:
print(urllib.parse.urljoin("https://www.baidu.com","s?wd=%E7%96%91%E6%90%AD%E8%BD%BD%E4%BD%A9%E6%B4%9B%E8%A5%BF%E9%A3%9E%E6%9C%BA%E6%B6%88%E5%A4%B1%E5%9C%A8%E5%A4%A7%E4%BC%97%E8%A7%86%E7%BA%BF&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1"))
print(urllib.parse.urljoin("https://www.baidu.com/s?wd=%E7%96%91%E6%90%AD%E8%BD%BD%E4%BD%A9%E6%B4%9B%E8%A5%BF%E9%A3%9E%E6%9C%BA%E6%B6%88%E5%A4%B1%E5%9C%A8%E5%A4%A7%E4%BC%97%E8%A7%86%E7%BA%BF&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1","https://baike.baidu.com/item/%E5%8D%97%E5%B8%8C%C2%B7%E4%BD%A9%E6%B4%9B%E8%A5%BF/11038248"))
print(urllib.parse.urljoin("https://www.baidu.com/s?wd=%E7%96%91%E6%90%AD%E8%BD%BD%E4%BD%A9%E6%B4%9B%E8%A5%BF%E9%A3%9E%E6%9C%BA%E6%B6%88%E5%A4%B1%E5%9C%A8%E5%A4%A7%E4%BC%97%E8%A7%86%E7%BA%BF&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1","/s?wd=佩洛西访亚洲行程公布%20未提台湾&usm=1&ie=utf-8&rsv_pq=c70cbd19000aa88c"))
print(urllib.parse.urljoin("https://baike.baidu.com/item/%E5%8D%97%E5%B8%8C%C2%B7%E4%BD%A9%E6%B4%9B%E8%A5%BF/11038248","/item/%E5%91%A8%E6%9D%B0%E4%BC%A6/129156?fr=aladdin"))
第一个输出https://www.baidu.com/s?wd=%E7%96%91%E6%90%AD%E8%BD%BD%E4%BD%A9%E6%B4%9B%E8%A5%BF%E9%A3%9E%E6%9C%BA%E6%B6%88%E5%A4%B1%E5%9C%A8%E5%A4%A7%E4%BC%97%E8%A7%86%E7%BA%BF&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1
第二个输出https://baike.baidu.com/item/%E5%8D%97%E5%B8%8C%C2%B7%E4%BD%A9%E6%B4%9B%E8%A5%BF/11038248
第三个输出https://www.baidu.com/s?wd=佩洛西访亚洲行程公布%20未提台湾&usm=1&ie=utf-8&rsv_pq=c70cbd19000aa88c
第四个输出https://baike.baidu.com/item/%E5%91%A8%E6%9D%B0%E4%BC%A6/129156?fr=aladdin
6.urllib.parse.parse_qs 《解析字符串参数返回字典形式数据》
例:
segmentation = urllib.parse.urlparse("https://www.baidu.com/s?wd=%E9%98%BF%E5%A7%A81%E4%B8%AA%E6%9C%88%E4%BA%A4%E5%BE%8020%E5%A4%9A%E5%90%8D%E7%94%B7%E5%AD%90%E8%AE%A9%E4%B9%B0%E6%B0%B4%E6%9E%9C")
query = segmentation.query
strQuery = urllib.parse.parse_qs(query)
print(strQuery)
输出{'wd': ['阿姨1个月交往20多名男子让买水果']}
7.urllib.parse.parse_qsl 《解析字符串参数返回字段名和字段值对列表形式数据》
例:
segmentation = urllib.parse.urlparse("https://www.baidu.com/s?wd=%E9%98%BF%E5%A7%A81%E4%B8%AA%E6%9C%88%E4%BA%A4%E5%BE%8020%E5%A4%9A%E5%90%8D%E7%94%B7%E5%AD%90%E8%AE%A9%E4%B9%B0%E6%B0%B4%E6%9E%9C")
query = segmentation.query
strQuery = urllib.parse.parse_qsl(query)
print(strQuery)
输出[('wd', '阿姨1个月交往20多名男子让买水果')]
《转码类别有》
1.urllib.parse.urlencode 《转为ASCII 文本字符串》
例:
params = {"ie":"UTF-8","wd":"字节串"}
baseUrl = "https://www.baidu.com/s?"
finalUrl = urllib.parse.urljoin(baseUrl,urllib.parse.urlencode(params))
finalUrl2 = baseUrl+urllib.parse.urlencode(params)
print(finalUrl)
print(finalUrl2)
第一个输出https://www.baidu.com/ie=UTF-8&wd=%E5%AD%97%E8%8A%82%E4%B8%B2
第二个输出https://www.baidu.com/s?ie=UTF-8&wd=%E5%AD%97%E8%8A%82%E4%B8%B2
2.urllib.parse.quote 《将文本字符串转换为字节码》
3.urllib.parse.unquote 《与urllib.parse.quote正相反》
例:
url = "https://www.baidu.com/s?wd=%E9%B8%BF%E6%98%9F%E5%B0%94%E5%85%8B%E5%86%8D%E6%8D%901%E4%B8%AA%E4%BA%BF&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1"
segmentation = urllib.parse.urlparse(url)
segmentationStr = segmentation.query.split("&")[0].split("=")[1]
finalStr = urllib.parse.unquote(segmentationStr)
print(finalStr)
finalStr2 = urllib.parse.quote(finalStr)
print(finalStr2)
第一个输出:鸿星尔克再捐1个亿
第二个输出:%E9%B8%BF%E6%98%9F%E5%B0%94%E5%85%8B%E5%86%8D%E6%8D%901%E4%B8%AA%E4%BA%BF
网友评论