独特的域名网址列表

时间:2012-04-28 09:56:29

标签: python list

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']

此示例列表包含同一域中的两个网址:

http://www.doopa.pl/1

http://www.doopa.pl/2

从这个列表(网址)我必须创建第二个唯一列表。第二个列表只能包含一个唯一域中的一个URL。

第一个列表甚至可以包含100.000个网址和更多。

什么是pythonic方法来实现这一目标?

2 个答案:

答案 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

现在你有了一个带有关联者路径的域名。