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

このサンプルリストには、同じドメイン上の2つのURLが含まれています。

http://www.doopa.pl/1

http://www.doopa.pl/2

このリスト(URL)から、2番目の一意のリストを作成する必要があります。2番目のリストには、1つの一意のドメインからの1つの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']

結果には、にリストされている各ドメインの最後のURLが含まれることに注意してくださいurls。最初のものが必要な場合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

これで、アソシエイトのパスを持つドメインのdictができました。

于 2012-04-28T10:08:41.387 に答える