Giter VIP home page Giter VIP logo

preciazo's Introduction

preciazo

scrapeo "masivo" de precios y datos en supermercados argentinos

¿te interesa colaborar con el proyecto? hablame por Twitter, por email o por GitHub :)

proyectos similares

componentes

scraper-rs

el scraper busca links de productos a scrapear, descarga todos los links, extrae varios datos y los guarda en una base de datos SQLite (definida en db-datos).

(antes había un scraper escrito en JavaScript, pero por problemas de reliability lo reescribí en Rust (?))

sitio

el sitio renderiza páginas a partir de la base de datos y hace gráficos lindos.

setup

para el schema de la base de datos y el sitio, es necesario Node.js y pnpm. para el scraper, es necesario Rust estable.

crea la base de datos:

cd db-datos/
pnpm install
pnpm migrate

después, escrapea un sample de productos de Carrefour a una BD:

cd ../scraper-rs/
cargo run -- fetch-list ../data/samples/Carrefour.50.txt

ahora miralo en el sitio:

cd ../sitio/
pnpm install
pnpm dev

preciazo's People

Contributors

catdevnull avatar

Stargazers

Juan Jose Primosich avatar Tanishq Manuja avatar Matias Bubello avatar  avatar Auca Coyan avatar Isaias Romero avatar Federico Martinez avatar

Watchers

 avatar Matias Bubello avatar  avatar

preciazo's Issues

uh oh.. carrefour: ean empty

Execution finished without errors.
Result: 173218 rows returned in 22292ms
At line 1:
select * from precios where ean = '';

debuggear paginas fallidas dia y carrefour

Procesado Dia-2024-01-01-05:00.warc.zst (3745 ok, 531 errores) (tardó 6 minutes 35 seconds)

sospecho que estamos intentando demasiado rápido en warcificator, tenemos que chequear status y reintentar

no crashear

preciazo-scraper-1  | called `Result::unwrap()` on an `Err` value: failed to get best selling product urls
preciazo-scraper-1  | note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
preciazo-scraper-1  | Waiting for 84897.60594589s```

Tendencias de precios

Quizá es posible con cierto tiempo ~1 a 3 meses poder registrar las tendencias de subida y bajada de precios. Se ven bastantes regulares en algunos productos. esto permitiría comprar estrategicamente.

https://preciazo.experimentos.nulo.ar/ean/7798042381012
imagen

pensaría:

  1. Con x productos de primera necesidad ver si hay regularidades en los ciclos de cambio de precio
  2. Detectar el mejor momento de compra o tendencia de baja
  3. Evaluar cuáles pueden ser los factores que modifiquen precios: dia, inicio de mes, regularidad de tiempo de un precio, etc

debuggear 10k+ páginas perdídas de coto

Preciazo Admin (prod):
Procesado Coto-2023-12-31-02:16.warc.zst (26756 ok, 42 errores) (tardó 36 minutes 50 seconds)

vs

Procesado Coto-2024-01-01-04:59.warc.zst (17809 ok, 0 errores) (tardó 23 minutes 9 seconds)

healthcheck: unique EAN

si se hacen dos scraps en menos de 25h puede incorrectamente reportar que está todo bien por más que ninguno de los dos scraps terminaron, porque al contar las entries da el threshold pero en realidad hay varios del mismo EAN

debuggear falla subida s3

Falló subir Coto-2024-01-01-04:59.warc.zst a S3; ConnectionRefused: Unable to connect. Is the computer able to access the url?

database is locked

preciazo-scraper-1  | called `Result::unwrap()` on an `Err` value: error returned from database: (code: 5) database is locked
preciazo-scraper-1  | 
preciazo-scraper-1  | Caused by:
preciazo-scraper-1  |     (code: 5) database is locked
preciazo-scraper-1  | note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
preciazo-scraper-1  | thread 'tokio-runtime-worker' panicked at src/main.rs:118:25:
preciazo-scraper-1  | called `Result::unwrap()` on an `Err` value: JoinError::Panic(Id(15387), ...)
preciazo-scraper-1  | thread 'main' panicked at src/main.rs:471:10:
preciazo-scraper-1  | called `Result::unwrap()` on an `Err` value: task 10 panicked

Fuentes

Datos

Requeridos

  • EAN
  • Precio

Mejor

  • Nombre
  • Imagenes
  • En stock

Fuentes

scrapear 2x1 entre otras cosas

un producto que personalmente ME IMPORTA UN MONTON es el pura frutta de manzana. al dia de la fecha, se ve así:

image

pero esto es mentiroso, porque en realidad, en Farmacity y en Carrefour hay promociones que cambian el temita mucho:

carrefour farmacity
image image

no se que tan dificil scrapearlo. es dificil pensar esto tambien a nivel UI, porque a veces estas promociones requieren varias unidades (como justamente esta) o alguna cosa de membersía (como el caso de carrefour)

pero al menos mostrar las promociones actuales es un buen lugar por el que empezar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.