Skip to content

Instantly share code, notes, and snippets.

@rg3915
Forked from lffsantos/tree.py
Last active March 17, 2018 02:06
Show Gist options
  • Save rg3915/83f6f17ea282f50eef1f to your computer and use it in GitHub Desktop.
Save rg3915/83f6f17ea282f50eef1f to your computer and use it in GitHub Desktop.
tree.py
from collections import defaultdict
import copy
import csv
import json
from urllib.parse import urlparse
def parser_urls(urls, orig={}):
'''
recebe uma lista de urls e vai parseando enquanto essa tiver um diretorio
retorna uma lista de dicionário com a url parseada
'''
new_urls = {}
for key, values in urls.items():
if not isinstance(values, dict):
if len(values) > 0:
if values:
new_urls[key] = defaultdict(list)
if isinstance(values, list):
for v in values:
v_key, v_values = v.split('/')[1], v.split("/")[2:]
if v_key in orig:
new_urls[key][v_key][v_values[0]] = "/"+ "/".join(v_values[1:])
new_urls[key][v_key].update(parser_urls(new_urls[key][v_key], orig))
else:
check = False
if bool(new_urls[key]):
check = True
if len(v_values) > 0:
new_urls[key][v_key] = "/"+ "/".join(v_values)
orig = copy.deepcopy(new_urls[key])
if check:
new_urls[key].update(parser_urls(new_urls[key], orig))
else:
new_urls[key]= parser_urls(new_urls[key], orig)
else:
if not isinstance(values, dict):
if len(values.split('/')) > 1:
v_key, v_values = values.split('/')[1], values.split("/")[2:]
if v_values:
new_urls[key][v_key] = "/"+"/".join(v_values)
orig = copy.deepcopy(new_urls[key])
new_urls[key] = parser_urls(new_urls[key], orig)
else:
new_urls[key] = v_key
else:
new_urls[key] = values
return new_urls
filename = '2.csv'
with open(filename) as csvfile:
spamreader = csv.reader(csvfile)
urls_list = defaultdict(list)
for row in spamreader:
path = urlparse(row[0]).path
if path != "":
urls_list[urlparse(row[0]).netloc].append(path)
result = parser_urls(urls_list)
print(json.dumps(result, indent=4))
# in:
# http://esporte.uol.com.br
# http://esporte.uol.com.br/futebol/campeonatos/libertadores/ultimas-noticias/2016/03/07/pressao-da-diretoria-raiva-da-torcida-e-falhas-assustam-sp-antes-do-river.htm
# http://esporte.uol.com.br/surfe/ultimas-noticias/2016/03/07/brasileiro-estreante-e-modelo-havaiana-serao-unico-casal-da-elite-do-surfe.htm
# http://esporte.uol.com.br/surfe/ultimas-noticias2/2016/03/07/brasileiro-estreante-e-modelo-havaiana-serao-unico-casal-da-elite-do-surfe.htm
# http://economia.uol.com.br
# http://economia.uol.com.br/noticias/redacao/2016/03/07/analistas-veem-queda-maior-do-pib-em-2016-de-35-e-inflacao-de-759.htm
# http://economia.uol.com.br/noticias/efe/2016/03/07/euro-desce-para-us-10982-em-frankfurt.htm
# out
"""
{
"economia.uol.com.br": {
"noticias": {
"efe": {
"2016": {
"03": {
"07": "euro-desce-para-us-10982-em-frankfurt.htm"
}
}
},
"redacao": {
"2016": {
"03": {
"07": "analistas-veem-queda-maior-do-pib-em-2016-de-35-e-inflacao-de-759.htm"
}
}
}
}
},
"esporte.uol.com.br": {
"surfe": {
"ultimas-noticias2": {
"2016": {
"03": {
"07": "brasileiro-estreante-e-modelo-havaiana-serao-unico-casal-da-elite-do-surfe.htm"
}
}
},
"ultimas-noticias": {
"2016": {
"03": {
"07": "brasileiro-estreante-e-modelo-havaiana-serao-unico-casal-da-elite-do-surfe.htm"
}
}
}
},
"futebol": {
"campeonatos": {
"libertadores": {
"ultimas-noticias": {
"2016": {
"03": {
"07": "pressao-da-diretoria-raiva-da-torcida-e-falhas-assustam-sp-antes-do-river.htm"
}
}
}
}
}
}
}
}
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment