Организация результатов в Python

Хорошо, так что в основном у меня есть скрипт Google, который ищет ключевое слово. Результаты выглядят так:

    http://www.example.com/user/1234
    http://www.youtube.com/user/125
    http://www.forum.com/user/12

Что я мог сделать, чтобы организовать эти результаты, как это?:

    Forums:
    http://www.forum.com/user/12

    YouTubes:
    http://www.youtube.com/user/125

    Unidentified:
    http://www.example.com/user/1234

Кстати, я организую их по ключевым словам. Если в URL есть "форум", то он попадает в список форумов, если у него есть YouTube, он попадает в список YouTube, но если ни одно из ключевых слов не совпадает, то оно переходит к неопознанному.

5 ответов

Решение

Что-то вроде этого? Я думаю, вы сможете адаптировать этот пример к вашим потребностям

import pprint
import re

urls = ['http://www.example.com/user/1234',
        'http://www.youtube.com/user/126',
        'http://www.youtube.com/user/125',
        'http://www.forum.com/useryoutube/12'] 

pattern = re.compile('//www\.(\w+)\.')

keys = ['forum', 'youtube']
results = dict()

for u in urls:
    ms = pattern.search(u)
    key = ms.group(1)
    if key in keys:
        results.setdefault(key, []).append(u)

pprint.pprint(results)

1/. Создать dictи назначьте пустой список каждому ключевому слову, которое у вас есть. например my_dict = {'forums':[],'youtube':[],'unidentified':[]}

2/. Проанализируйте ваши URL.

3 /. Сгенерируйте ключ для вашего URL, доменного имени в вашем случае, вы можете извлечь ключ, используя re модуль регулярных выражений.

4 / Проверьте словарь (на шаге 1) для этого ключа, если он не существует, присвойте ему "неопознанный ключ", если он существует, добавьте этот URL в список в словаре с этим ключом.

import urlparse

urls = """
http://www.example.com/user/1234
http://www.youtube.com/user/125
http://www.forum.com/user/12
""".split()

categories = {
    "youtube.com": [],
    "forum.com": [],
    "unknown": [],
}

for url in urls:
    netloc = urlparse.urlparse(url).netloc
    if netloc.count(".") == 2:
        # chop sub-domain
        netloc = netloc.split(".", 1)[1]
    if netloc in categories:
        categories[netloc].append(url)
    else:
        categories["unknown"].append(url)
print categories

Разобрать URL. Найдите категорию. Добавить полный URL

Вероятно, вы должны хранить отсортированные результаты в словаре, а несортированные - в списке. Затем вы можете отсортировать это так:

categorized_results = {"forum": [], "youtube": []}
uncategorized_results = []
for i in results:
    i = i.split(".")
    for k in categorized_results:
        j = True
        if k in i:
            categorized_results[k].append(i)
            j = False
        if j:
            uncategorized_results.append(i)

Если вы хотите вывести его аккуратно:

category_aliases: {"forum": "Forums:", "youtube": "Youtubes:"}
for i in categorized_results:
    print(category_aliases[i])
    for j in categorized_results[i]:
        print(j)
    print("\n")
print("Unidentified:")
print("\n".join(uncategorized_results)) # Let's not put in another for loop.

Как насчет этого:

from urlparse import urlparse

class Organizing_Results(object):

    CATEGORY = {'example': [], 'youtube': [], 'forum': []}

    def __init__(self):
        self.url_list = []

    def add_single_url(self, url):
        self.url_list.append(urlparse(url))

    def _reduce_result_list(self, acc, element):
        for c in self.CATEGORY:
            if c in element[1]:
                return self.CATEGORY[c].append(element)
        return self.CATEGORY['example'].append(element)

    def get_result(self):
        reduce(lambda x, y: c._reduce_result_list(x, y), c.url_list, [])
        return self.CATEGORY

c = Organizing_Results()          
c.add_single_url('http://www.example.com/user/1234')
c.add_single_url('http://www.youtube.com/user/1234')
c.add_single_url('http://www.unidentified.com/user/1234')
c.get_result()

Вы можете легко расширить класс с помощью большего количества функций, сколько вам нужно.

Другие вопросы по тегам