0
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:

http://www.doopa.pl/1

http://www.doopa.pl/2

从这个列表(网址)中,我必须制作第二个唯一的列表。第二个列表只能包含来自一个唯一域的一个 url。

第一个列表甚至可以包含 100.000 个 URL 等等。

实现此目的的pythonic方法是什么?

4

2 回答 2

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

请注意,结果将包含 中列出的每个域的最后一个urlsURL 。如果你想要第一个,那么reversed(urls)在理解中循环。

于 2012-04-28T10:02:05.443 回答
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

您现在有一个包含关联路径的域字典。

于 2012-04-28T10:08:41.387 回答