urls = ['http://www.doopa.pl/1','http://www.doopa.pl/2',
'http://www.dupa2.pl/4/php.pl', 'http://www.dupa3.pl/4/php?gfdgfd=44',
'www.dupa4.pl/4/php.pl']
此示例列表包含同一域中的两个网址:
从这个列表(网址)我必须创建第二个唯一列表。第二个列表只能包含一个唯一域中的一个URL。
第一个列表甚至可以包含100.000个网址和更多。
什么是pythonic方法来实现这一目标?
答案 0 :(得分:3)
致电urlparse.urlparse
并使用结果的netloc
成员。
>>> urls = ['http://www.doopa.pl/1','http://www.doopa.pl/2',
... 'http://www.dupa2.pl/4/php.pl', 'http://www.dupa3.pl/4/php?gfdgfd=44',
... 'www.dupa4.pl/4/php.pl']
>>> from urlparse import urlparse
>>> dict((urlparse(u).netloc, u) for u in urls).values()
['www.dupa4.pl/4/php.pl', 'http://www.dupa2.pl/4/php.pl', 'http://www.doopa.pl/2', 'http://www.dupa3.pl/4/php?gfdgfd=44']
请注意,结果将包含urls
中列出的每个域的 last 网址。如果你想要第一个,那么在理解中循环reversed(urls)
。
答案 1 :(得分:1)
import urlparse
urls = ['http://www.doopa.pl/1','http://www.doopa.pl/2',
'http://www.dupa2.pl/4/php.pl', 'http://www.dupa3.pl/4/php?gfdgfd=44',
'www.dupa4.pl/4/php.pl']
domains = {}
for url in urls:
if not url.startswith("http://"):
# Woops this will screw up the parser. Lets clean that up
url = "http://" + url
parse = urlparse.urlparse(url)
path = parse.path
netloc = parse.netloc
if netloc in domains:
domains[netloc].append(path)
else:
domains[netloc ] = [path]
print domains
现在你有了一个带有关联者路径的域名。