python:解析URL 在python中,可以用urlparser包优雅的拆分URL。 ## 拆分并分离query ``` # python2.7 import urlparse parsed_data = urlparse.urlparse(url) path = parsed_data.path query = urlparse.parse_qs(parsed_data.query) ``` ## 拼凑URL ``` # py2.7 这里的返回值是上面的urlparser返回的。需要特别处理一下。 import urllib query = [(k, v) for k, vlist in query.iteritems() for v in vlist] query = urllib.urlencode(query) ``` ## 从URL中去除不需要的参数 ``` import urlparse import urllib import time url_enable_query = set(["rs_id"]) def remove_url_query(url): parsed_data = urlparse.urlparse(url) path = parsed_data.path query = urlparse.parse_qs(parsed_data.query) query = [(k, v) for k, vlist in query.iteritems() if k in url_enable_query for v in vlist ] query = urllib.urlencode(query) return "{}?{}".format(path, query) ``` 这个函数的性能实在太差了。10000次用了整整45s。 在不严格的情况下,自己用split进行判定会好很多。快了12倍。 ``` import urlparse import urllib import time url_enable_query = set(["rs_id"]) def remove_url_query2(url): parsed_data = url.split("?") path = parsed_data[0] if len(parsed_data) == 1: return path query = parsed_data[1] query = query.split("&") query = "&".join([x for x in query if x.split("=")[0] in url_enable_query]) return "{}?{}".format(path, query) ``` 来自 大脸猫 写于 2017-06-05 17:38 -- 更新于2020-10-19 13:06 -- 1 条评论