def parse_suc(self, html_snippet): pq = PyQuery(html_snippet) data = {} data['nombre'] = 'Sucursal ' + pq('.name a').text() data['cadena_nombre'] = pq('.name + div img').attr('title') data['cadena_id'] = nombre2id[data['cadena_nombre']] data['direccion'] = pq('.name + div + div').text() prov_ciudad = pq('.name + div + div + div').text() normal_prov_ciudad = texto.normalizar(prov_ciudad) prov_ciudad = prov_ciudad.split() for p in PROVINCIAS: if p in normal_prov_ciudad: break else: assert ValueError("provincia en %s" % normal_prov_ciudad) # la pampa, la rioja sep = len(p.split()) data['provincia'] = " ".join(prov_ciudad[:sep]) data['ciudad'] = " ".join(prov_ciudad[sep:]) ciudad = inferir_ciudad(data['ciudad'], data['provincia']) if ciudad: data['ciudad_relacionada_id'] = ciudad[2] ubicacion = pq('.encuentra-la-ruta').attr('rel').split('l(')[1][:-1].split(', ') data['lat'], data['lon'] = ubicacion data['telefono'] = pq('.name + div + div + div + div').text().strip() return data
def parse_sucursal(self, suc): s = {} s['nombre'] = suc['nombre'] s['cadena'] = 'Disco' s['cadena_id'] = 6 dire = re.findall(r'(^.*)\.([ \d / -]+)$', suc['direccion']) if dire: s['direccion'] = dire[0][0].strip() s['telefono'] = dire[0][1].strip() else: s['direccion'] = suc['direccion'] if suc['barrio'] in BARRIOS_CBA: # simplifico a cba suc['barrio'] = u'Córdoba' ciudad_inferida = inferir_ciudad(suc['barrio'], suc['provincia']) if ciudad_inferida: s['ciudad'] = suc['barrio'] s['ciudad_inferida'] = ciudad_inferida[0] s['ciudad_relacionada_id'] = ciudad_inferida[2] s['provincia'] = suc['provincia'] return s
def limpiar(self, place, ciudad): """ devuelve un diccionario con las siguientes claves:: nombre, cadena, direccion, lon, lat, ciudad_segun_google, related_city_id, telefono, url, cadena_nombre, cadena_id """ place.get_details() suc = {} # Place a veces no trae la direccion # y quedará (ciudad, provincia), en vez de (direccion, ciudad) dire = place.formatted_address.split(',') hay = len(dire) == 4 suc['direccion'] = dire[0].strip() if hay else '' suc['ciudad'] = dire[1].strip() if hay else dire[0].strip() suc['provincia'] = dire[2].strip() if hay else dire[1].strip() suc['provincia'] = suc['provincia'].strip(' Province') # como google place busca un radio a partir de una ciudad, no necesariamente # el supermercado encontrado **es** de esa ciudad. # La ciudad_relacionada debe tomarse sólo como referencia. # porque la inferencia puede fallar. suc['ciudad_relacionada_id'] = ciudad.id ciudad_data = inferir_ciudad(suc['ciudad'], suc['provincia']) if ciudad_data: (suc['ciudad'], suc['provincia'], suc['ciudad_relacionada_id']) = ciudad_data suc['nombre'] = place.name cadena = inferir_cadena(place.name) if cadena: suc['cadena_nombre'], suc['cadena_id'] = cadena suc['lon'] = place.geo_location['lng'] suc['lat'] = place.geo_location['lat'] if suc['direccion'] == '': # Se deberia hacer un reverse lookup a partir de la localizacion # via la API de google maps. dire = reverse_geocode(suc['lat'], suc['lon']) if dire: suc['direccion'] = dire.split(',')[0] suc['telefono'] = place.local_phone_number suc['url'] = place.website return suc