Организация результатов в 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()
Вы можете легко расширить класс с помощью большего количества функций, сколько вам нужно.