在python中,可以用urlparser包优雅的拆分URL。
# python2.7
import urlparse
parsed_data = urlparse.urlparse(url)
path = parsed_data.path
query = urlparse.parse_qs(parsed_data.query)
# py2.7 这里的返回值是上面的urlparser返回的。需要特别处理一下。
import urllib
query = [(k, v) for k, vlist in query.iteritems() for v in vlist]
query = urllib.urlencode(query)
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)