mgaitan / preciosa Goto Github PK
View Code? Open in Web Editor NEWInteligencia colectiva contra la inflación
Home Page: http://preciosdeargentina.com.ar
License: Other
Inteligencia colectiva contra la inflación
Home Page: http://preciosdeargentina.com.ar
License: Other
fuente http://www.pepsico.com.ar/Argentina/Brands.html
obtener nombre y logo
Estos locales son de Córdoba. Al parecer existe otro en Mendoza
Dinosaurio Mall - Av. Fuerza Aérea Argentina 1700 Bº San Francisco.
Lunes a domingos de 10:00 a 22:00 Hs.Tel.: (351) 526 1566
Dinosaurio Express: Agustín Garzón 1252 Bº San Vicente
Lunes a domingos de 10:00 a 22:00 Hs.Tel.: (351) 526 1595
Colectora Norte de Circunvalación Sur, entre Av. Velez Sarfield y Av. Armada Argentina.
Lunes a domingos de 09:00 a 21:00 Hs. Tel.: (351) 535 1100
Av. Sarmiento 1037 – Ruta E53, Salsipuedes.
Lunes a domingos de 09:00 a 22:00 Hs.
La información de acuerdo de precios (~500 productos por cadena) fue sistematizada en un formato de texto plano tabular por Ezequiel Fernandez Vera a partir de los PDF difundidos por el gobierno.
Realizamos un script que parsea estos datos.
Hay que extender ese script para incoporar los datos directamente a la base de datos y. de ser posible, incoporar los códigos UPC de los productos referidos cruzando datos con otra fuente de información (quizas los datos de #6 sirvan, al menos para el caso del acuerdo con Walmart).
En el repositorio de datos se encuentra disponible el archivo acuerdo_de_precios.tar.gz
que contiene los archivos aportados por Ezequiel y el json generado hasta el momento
Para el primer deploy, la homepage será un sistema de blog. Poner resumen de articulos y comentarios de disqus.
Probablemente se pueda obtener desde acá, que son SelectBox anidados que se llenan via ajax.
http://www.supermercadosdia.com.ar/ofertas
No obstante, puede que no todas las tiendas figuren (en el mapa suelen salir más de las listadas)
generar CSV en el formato descripto en #197
las sucursales de chango más se pueden scrappear desde http://www.superchangomas.com.ar/
similares expresiones regulares que para el sitio de walmart
[
'/sucursales/alberdi.php',
'/sucursales/cap_fed_av_san_juan.php',
'/sucursales/canada_de_gomez.php',
'/sucursales/cuenca.php',
'/sucursales/flores.php',
'/sucursales/la_boca.php',
'/sucursales/liniers.php',
'/sucursales/mataderos.php',
'/sucursales/sucursal.php?id=1090',
'/sucursales/3_de_febrero.php',
'/sucursales/almirante_brown.php',
'/sucursales/jose_c_paz.php',
'/sucursales/junin.php',
'/sucursales/lanus.php',
'/sucursales/malvinas_argentinas.php',
'/sucursales/moreno.php',
'/sucursales/moreno_shopping.php',
'/sucursales/san_martin.php',
'/sucursales/sucursal.php?id=1084',
'/sucursales/gba_tigre.php',
'/sucursales/sucursal.php?id=1059',
'/sucursales/sucursal.php?id=1076',
'/sucursales/sucursal.php?id=1077',
'/sucursales/sucursal.php?id=1100',
'/sucursales/sucursal.php?id=1044',
'/sucursales/sucursal.php?id=1045',
'/sucursales/sucursal.php?id=1069',
'/sucursales/sucursal.php?id=1089',
'/sucursales/sucursal.php?id=1091',
'/sucursales/sucursal.php?id=1046',
'/sucursales/catamarca.php',
'/sucursales/villa_nueva.php',
'/sucursales/cordoba_fuerza_aerea.php',
'/sucursales/sucursal.php?id=1097',
'/sucursales/sucursal.php?id=1098',
'/sucursales/parana.php',
'/sucursales/formosa.php',
'/sucursales/san_pedro_jujuy.php',
'/sucursales/jujuy.php',
'/sucursales/la_pampa.php',
'/sucursales/la_rioja.php',
'/sucursales/?fid=4',
'/sucursales/mendoza_maipu.php',
'/sucursales/mendoza_san_martin.php',
'/sucursales/sucursal.php?id=1051',
'/sucursales/sucursal.php?id=1099',
'/sucursales/neuquen.php',
'/sucursales/bariloche.php',
'/sucursales/cipolletti.php',
'/sucursales/viedma.php',
'/sucursales/salta.php',
'/sucursales/salta_oran.php',
'/sucursales/sucursal.php?id=1075',
'/sucursales/sucursal.php?id=1078',
'/sucursales/santiago_del_estero.php',
'/sucursales/sucursal.php?id=1081',
'/sucursales/sucursal.php?id=1092',
'/sucursales/villa_mercedes.php',
'/sucursales/rio_sali.php',
'/sucursales/sucursal.php?id=1082',
'/sucursales/sucursal.php?id=1106',
'/sucursales/sucursal.php?id=1088',
'/sucursales/neuquen.php',
'/sucursales/catamarca.php',
'/sucursales/parana.php',
'/sucursales/formosa.php',
'/sucursales/la_pampa.php',
'/sucursales/la_rioja.php',
'/sucursales/neuquen.php',
'/sucursales/santiago_del_estero.php',
'/sucursales/villa_mercedes.php']
Pringles
Zucaritas
Corn Flakes
Kellness
Choco Krispis
All-bran
Froot Loops
http://www.nestle.com.ar/marcas
PUREZA VITAL
AWAFRUT
ECO DE LOS ANDES
GLACIAR
NESTUM
NAN PRO 3
Purina
Nesquick
Nescau
Nescafé
NESPRESSO
AMANACER
COFFEE-MATE
Dolca
CHOCAPIC
TRIX
FITNESS
Nestlé
SUFLAIR
CRUNCH
GAROTO
SERENATA DE AMOR
BATÓN
Maggi
EPA!
TORPEDO
CHOMP
FRIGOR
SIN PARAR
MEGA
LA FRUTTA
NOVELTY
LUXOR
CONOGOL
NESQUIK
PICO DULCE
POPSY
HELLO KITTY
NIDO
LA LECHERA
SVELTY
Es un SWF. Son sólo 20 sucursales, quizas se pueden cargar a mano.
A partir del historial de precios, mostrar un grafico del historico, filtrable por cadena y/o ciudad
Análogo a #3 , crear un script para importar las sucursales de Jumbo
Ver
https://github.com/mgaitan/preciosa/wiki/Sucursales-de-super#jumbo
http://www.agd.com.ar/es/sus_marcas.htm
crear/actualizar fixture de marcas de AGD
['Natura',
'Mayoliva',
'Cada D\xc3\xada',
"Manley's Young",
'Sojola',
"Runny's",
'Trovattore',
'Mazola',
'Familiar']
El sistema de carrefour es un buscador geolocalizado basicamente hace un POST
a la direccion
http://www.carrefour.com.ar/storelocator/index/search/
r = requests.post('http://www.carrefour.com.ar/storelocator/index/search/', {'search[address]': 'Mendoza, Argentina', 'search[geocode]': '-32.890183,-68.8440498'})
El parametro search[geocode]
es latitude, longitude
de la ciudad en cuestion (datos existentes en el modelo City
)
Los resultados pueden capturarse así.
pq = PyQuery(r.content)
pq('div.storelocator_result')
Tener en cuenta que los resultados son por proximidad geográfica. Si se busca "Ushuaia", aparecen tambien locales de Rio Grande.
Hacer un scipt de scraping para el sitio de walmart que cree instancias del modelo Sucursal
con los datos básicos: dirección, ciudad, nombre/denominación.
Ver
https://github.com/mgaitan/preciosa/wiki/Sucursales-de-super#walmart
armar un listado desde
http://global.mondelezinternational.com/ar/es/Brands/default.aspx
en los posible incluir logos
Dado el modelo de datos, implementar una API rest pública básica. Debe permitir consultar
/sucursales/
Filtro por ciudad o posición + radio/categorias/
devuelve roots, categorias/<pk>
devuelve hijas de categoria <pk>
/categorias/XX/productos
devuelve un LIST de productos para esa categoria/productos/[<UPC>]
. Debe permitir filtrar por los numeros UPC (istartswith) y palabras, similar al buscador que tenemos. El post (crear instancia) requiere UPC y categoria de nivel 3 como obligatorio./sucursales/<pk>/productos/[<UPC>]
. Si no se especififica el UPC devuelve la lista de productos mas frecuentes (con más instancias de precios relacionadas). Para POST requiere el UPC y el dato obligatorio es el importeDebe tener autocompletado. Busca por campo descripcion y por UPC
Abro este ticket para revisar/pensar la UI de la web
este template free puede andar. necesita un widget para mostrar productos
En la vista de detalle de producto (#35), si no tiene asociada una marca, preguntar al usuario
plan a) Si se puede inferir marca (a partir del UPC o por palabra clave en la descripción)
preguntar "Ayudanos a confirmar ¿Este producto es marca XX? Si, NO. Si responde NO, aparece el formulario de plan b)
plan b) Presenta un combo autocompletable que permita buscar la marca en cuestion. Si esta no existe en la bbdd, ofrece la vista para cargar Marca y logo (#36)
incluir un widget del stream (filtrado ?) del hash #Preciosa y/o registrar un usuario y retuitear.
Crear página en facebook y poner el botón "Me gusta" bien visible en la web.
desde
http://www.molinos.com.ar/nuestras-marcas-detalle.aspx?Marca=1
a
http://www.molinos.com.ar/nuestras-marcas-detalle.aspx?Marca=21
simple scrap para generar marca y extraer logo
Obtener un archivo json a partir de este PDF
A diferencia del listado oficial en http://www.precioscuidados.com/listado-precios-cuidados.pdf el de carrefour tiene códigos de barra.
se puede usar https://github.com/jazzido/tabula
Definir entidades del sistema y dibujar los mismos en: http://yuml.me/
La Serenísima, Danonino, Actimel, Vidacol, Ser, Armonía, Fortuna
Requiere autenticación. Si el usuario no es staff, genera tarea para "revisar"
Debe permitir subir los logos
Una vista que liste los productos por categoria.
debe estar paginado y mostrar el thumbnail del producto con mejor precio
quizas deba presentarse en un grid a 2 columnas
Granja Tres Arrollos
Campos de Areco
La Comarca
Jet Food
debera generar un json con los productos de Coto
http://www.cotodigital.com.ar/l.asp?cat=775&id=775
debe incluir descripcion
, plu
(id unico de producto dentro de coto), Precio
y precio por unidad de medida
, 'categoriasy
url` al producto y por supuesto, la fecha de relevamiento
Fuente http://cocacoladeargentina.com.ar/producto/coca-cola/
Coca Cola
Coca Cola Light
Coca Cola Zero
Coca Cola Life
Fanta
Sprite
Sprite Zero
Schweppes
Aquarius
Cepita
Cepita Nutri Defensas
FUZE TEA
Dasani
Bonaqua
Powerade
Black Fire
Géau Vitaminwater
El sitio web https://www.walmartonline.com.ar/ (plataforma de compra online de la cadena Walmart) tiene una gran cantidad de productos clasificados en un árbol de categorías de hasta 3 niveles, con detalles de producto, precio, código UPC y foto.
Realizar un script (posiblemente en formato de management command
) que incorpore toda esta información a la base.
Marca
a partir de la descripción del productoNota: En el repositorio de datos el archivo walmart.zip
es un aporte de Pablo Peralta que contiene la información cruda de los productos en formato json. Se puede usar como referencia, pero no tiene discriminación de Marca ni categoría de los productos.
http://www.pg.com/es_LATAM/AR/marcas-p-and-g/marcas-globales.shtml
Oral B
Head & Shoulders
Gillete
Duracell
Wella
Pantene
Herbal Essences
Koleston
Wellaton
Always
Ace
Magistral
Cierto
Vencedor
Vick VapoRub
Eukanuba
Braun
@mgaitan Tengo un par de dudas.
Ya tengo listo los dumps en json. La primer duda es sobre el formato. ¿Está bien si el scraper entrega una lista? Del estilo que tenés dentro de "fields" en los fixtures. Por ejemplo para Mariano Max, los dumps que genero son:
[{"nombre": "Cruz del Eje (Suc. 6)", "ciudad": "Cruz del eje", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 13 hs. y de 17 hs. a 22 hs.Domingos y Feriados: de 9 hs. a 13 hs.", "direccion": "Jos\u00e9 Hern\u00e1ndez esq. Mitre, Cruz del Eje \u2013 Provincia de C\u00f3rdoba."}, {"nombre": "Jes\u00fas Mar\u00eda (Suc. 4)", "ciudad": "Jesus Maria", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 13 hs. y de 17 hs. a 21.30 hs.Domingos y Feriados: de 9 hs. a 13.30 hs.", "direccion": "Italia 363, Jes\u00fas Mar\u00eda."}, {"nombre": "Jos\u00e9 Ignacio D\u00edaz (Suc. 1)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bado: de 8 hs. a 13 hs. y de 17 hs. a 21 hs.Domingos y Feriados: de 9 hs. a 13 hs.", "direccion": "Av. 11 de Setiembre 2765 - B\u00b0 Jos\u00e9 Ignacio Diaz 2da Secci\u00f3n."}, {"nombre": "Villa Corina (Suc. 2)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 22 hs.Domingos y Feriados: de 9 hs. a 22 hs.", "direccion": "Av. A. Capdevila 1831 esq. Rancagua - B\u00b0 Villa Corina."}, {"nombre": "Amp. Centro Am\u00e9rica (Suc. 3)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 13 hs. y de 17 hs. a 21 hs.Domingos y Feriados: de 9 hs. a 13 hs.", "direccion": "Av. Saavedra Lamas 900 esq. L. Membrives - B\u00b0 A. C. Am\u00e9rica."}, {"nombre": "Los Pl\u00e1tanos (Suc. 5)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 22 hs.Domingos y Feriados: de 9 hs. a 22 hs.", "direccion": "Santa Ana 3551 esq. F\u00e9lix Paz - B\u00ba Los Pl\u00e1tanos."}, {"nombre": "Las Flores (Suc. 7)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 22 hs.Domingos y Feriados: de 9 hs. a 22 hs.", "direccion": "Av. Velez Sarsfield 4051 \u2013 Provincia de C\u00f3rdoba."}]
¿O necesitás que te pase también los parámetros "pk" y "model"?
Como verás, las ciudades aún están referenciadas por nombre, lo cual es ambiguo, tenés razón. ¿Te parece bien si directamente te paso el código de la ciudad, de acuerdo a los códigos que usas en tus fixtures?
Resolviendo estas dudas, hoy mismo te entrego los scrapers de Hiper Libertad, Mariano Max y Yaguar. Aún pueden quedar errores, va quedando cada vez más completo.
generar fixture y conseguir logos
Arcor
Bon o Bon
Rocklets
Cofler
Butter Toffees
Nikolo
Hamlet
Sapito
Mr. Pop´s
Menthoplus
Poosh
Blow Up
Mogul
Topline
BigTime
Noel
Águila
Cabsha
Saladix
Cereal Mix
Arcor Helados
Criollitas
Diversión
Formis
Tofi
Prestopronta
Godet
Hogareñas
Alka
Formis
Maná
Ser
Traviata
Cindor
Sonrisas
Rumba
Opera
Rex
Godet
Slice
Menthoplus
Cremino
Blanco y Negro
La Campagnola
BC
Nereida
Salsati
Poncho Negro
La Vendimia
Dulciora
Arcoa
incluir logos
A patir del modelo Categorias, hacer un menu desplegable con links a las vistas de listados de productos por categoria
https://www.libertadsa.com.ar/XX
donde XX
es
['misucursal_cordoba.php',
'misucursal_mendoza.php',
'misucursal_salta.php',
'misucursal_santafe.php',
'misucursal_chaco.php',
'misucursal_misiones.php',
'misucursal_sanjuan.php',
'misucursal_tucuman.php',
'misucursal_santiago.php']
Completado #18, hay que realizar un algoritmo que trate de asociar el listado de productos (por descripcion y opcionalmente categorias) a un producto existente en la base con UPC.
debe discriminar los productos no encontrados y generar otro json.
Tambien agregar un modelo UrlProd que asocie una url a un producto y cadena.
Una posibilidad es utilizar difflib. O bien hacer subsecuentes filtros de palabras en la descripcion de Coto.
Ejemplo:
en datos de walmart relevados es:
In [16]: Producto.objects.filter(descripcion__icontains='paladini').filter(descripcion__icontains='bondiola')
Out[16]: [<Producto: Bondiola paladini 100 gr>]
In [17]: Producto.objects.filter(descripcion__icontains='paladini').filter(descripcion__icontains='bondiola')[0].precio_set.all()
Out[17]: [<Precio: Bondiola paladini 100 gr: $ 21>]
PD: notar que es el mismo producto expresado en distinta unidad.
Digital ocean. VPS: hay que configurar virtualhost (multiples dominios hospedados). el dominio es preciosdeargentina.com.ar
Se puede armar un script con https://python-deploy-framework.readthedocs.org/en/latest/
Análogo a #3, crear un script para importar datos de sucursales de Vea
Ver
https://github.com/mgaitan/preciosa/wiki/Sucursales-de-super#vea
La web es http://www.unilever.com.ar/our-brands/ actualmente está inaccesible
Se puede obtener con una regex desde esta pagina de cache de google
Sólo texto
intentar obtener los logos.
Se pueden scrappear desde
www.yaguar.com/frontendSP/asp/XX
donde XX
es
['iframe_Autopista.asp',
'iframe_sucursalSantaFe.asp',
'iframe_SucursalesChaco.asp',
'iframe_SucursalesMendoza.asp',
'iframe_Sucursalesbahiablanca.asp',
'iframe_SucursalesCampana.asp',
'iframe_SucursalesMoreno.asp',
'iframe_SucursalesjoseCpaz.asp',
'iframe_sucursalescordoba.asp',
'iframe_SucursalesTigre.asp',
'iframe_sucursalesneuquen.asp',
'iframe_sucursalesSalta.asp',
'iframe_MardelPlata.asp',
'iframe_SanJuan.asp']
Ver subsecciones
http://www.molinocanuelas.com/productos.aspx?grupo=4&linea=3&marca=3
Muestra Detalle del producto
En la landing page poner un form de suscripción para avisar cuando se lance la aplicacion.
se puede usar esto
https://github.com/dokterbob/django-newsletter
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.