mirror of
https://github.com/catdevnull/preciazo.git
synced 2025-02-20 00:56:26 +00:00
parent
ecbf126619
commit
c217161d21
5 changed files with 52 additions and 8 deletions
4
.vscode/settings.json
vendored
Normal file
4
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"spellright.language": ["es_AR"],
|
||||||
|
"spellright.documentTypes": ["markdown", "latex", "plaintext"]
|
||||||
|
}
|
|
@ -1,13 +1,11 @@
|
||||||
import type { Config } from "drizzle-kit";
|
import type { Config } from "drizzle-kit";
|
||||||
|
|
||||||
if (!process.env.DB_PATH) throw new Error("no hay DB_PATH");
|
export const DB_PATH = process.env.DB_PATH ?? "../scraper/sqlite.db";
|
||||||
|
|
||||||
export const DB_PATH = process.env.DB_PATH;
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
schema: "./schema.ts",
|
schema: "./schema.ts",
|
||||||
out: "./drizzle",
|
out: "./drizzle",
|
||||||
dbCredentials: {
|
dbCredentials: {
|
||||||
url: process.env.DB_PATH,
|
url: DB_PATH,
|
||||||
},
|
},
|
||||||
} satisfies Config;
|
} satisfies Config;
|
||||||
|
|
42
readme.md
Normal file
42
readme.md
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# preciazo
|
||||||
|
|
||||||
|
scrapeo "masivo" de precios y datos en supermercados argentinos
|
||||||
|
|
||||||
|
## componentes (en orden de proceso)
|
||||||
|
|
||||||
|
- los link scrapers ([coto-link-scraper](./coto-link-scraper/), [dia-link-scraper](./dia-link-scraper/) y [userscripts/carrefour.js](./userscripts/carrefour.js)) crean listas de links a productos para scrapear
|
||||||
|
|
||||||
|
(no hace falta correrlos porque ya hay listas armadas en [data/](./data/))
|
||||||
|
|
||||||
|
- se usa wget (potencialmente reemplazado por algo custom en el futuro) que genera un archivo [WARC](https://iipc.github.io/warc-specifications/specifications/warc-format/warc-1.0/) con todas las paginas de productos
|
||||||
|
- el [scraper](./scraper/) procesa estos WARCs, extrayendo varios datos y guardandolos en una base de datos SQLite (definida en [db-datos](./db-datos/schema.ts))
|
||||||
|
- el [sitio](./sitio/) renderiza páginas a partir de la base de datos y hace gráficos lindos
|
||||||
|
|
||||||
|
## setup
|
||||||
|
|
||||||
|
hay que instalar [Bun](https://bun.sh/), que lo estoy usando porque hacía que el scraper corra más rápido. quizás en el futuro lo reemplace con good old Node.js.
|
||||||
|
|
||||||
|
aparte, se necesita zstd, que se usa para comprimir los WARCs eficientemente. seguro está disponible en las repos de tu distro favorita :)
|
||||||
|
|
||||||
|
empezá descargando un WARC con 50 páginas de sample, y recomprimilo con zstd:
|
||||||
|
|
||||||
|
```
|
||||||
|
wget --no-verbose --tries=3 --delete-after --input-file ./data/samples/Dia.txt --warc-file=dia-sample
|
||||||
|
gzip -dc dia-sample.warc.gz | zstd --long -15 --no-sparse -o dia-sample.tar.zst
|
||||||
|
```
|
||||||
|
|
||||||
|
después, scrapealo a una BD:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd scraper/
|
||||||
|
bun install
|
||||||
|
bun cli.ts scrap ../dia-sample.tar.zst
|
||||||
|
```
|
||||||
|
|
||||||
|
ahora miralo en el sitio:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd sitio/
|
||||||
|
bun install
|
||||||
|
bun --bun dev
|
||||||
|
```
|
|
@ -3,7 +3,7 @@ import { drizzle } from "drizzle-orm/bun-sqlite";
|
||||||
import * as schema from "db-datos/schema.js";
|
import * as schema from "db-datos/schema.js";
|
||||||
import { env } from "$env/dynamic/private";
|
import { env } from "$env/dynamic/private";
|
||||||
|
|
||||||
const sqlite = new Database(env.DB_PATH);
|
const sqlite = new Database(env.DB_PATH ?? "../scraper/sqlite.db");
|
||||||
|
|
||||||
export const db = drizzle(sqlite, { schema });
|
export const db = drizzle(sqlite, { schema });
|
||||||
export * as schema from "db-datos/schema.js";
|
export * as schema from "db-datos/schema.js";
|
||||||
|
|
|
@ -15,9 +15,9 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="/ean/7794000006911"
|
<a href="/ean/7794000006911">
|
||||||
>Sopa Instantánea KNORR QUICK Zapallo Romero Sobres 5 Un.</a
|
Sopa Instantánea KNORR QUICK Zapallo Romero Sobres 5 Un.
|
||||||
>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="/ean/7798062540253">Agua Saborizada Levité Pera 1,5 Lts.</a>
|
<a href="/ean/7798062540253">Agua Saborizada Levité Pera 1,5 Lts.</a>
|
||||||
|
|
Loading…
Reference in a new issue