documentación básica

fixes #4
This commit is contained in:
Cat /dev/Nulo 2023-12-27 19:55:08 -03:00
parent ecbf126619
commit c217161d21
5 changed files with 52 additions and 8 deletions

4
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,4 @@
{
"spellright.language": ["es_AR"],
"spellright.documentTypes": ["markdown", "latex", "plaintext"]
}

View file

@ -1,13 +1,11 @@
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;
export const DB_PATH = process.env.DB_PATH ?? "../scraper/sqlite.db";
export default {
schema: "./schema.ts",
out: "./drizzle",
dbCredentials: {
url: process.env.DB_PATH,
url: DB_PATH,
},
} satisfies Config;

42
readme.md Normal file
View 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
```

View file

@ -3,7 +3,7 @@ import { drizzle } from "drizzle-orm/bun-sqlite";
import * as schema from "db-datos/schema.js";
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 * as schema from "db-datos/schema.js";

View file

@ -15,9 +15,9 @@
</a>
</li>
<li>
<a href="/ean/7794000006911"
>Sopa Instantánea KNORR QUICK Zapallo Romero Sobres 5 Un.</a
>
<a href="/ean/7794000006911">
Sopa Instantánea KNORR QUICK Zapallo Romero Sobres 5 Un.
</a>
</li>
<li>
<a href="/ean/7798062540253">Agua Saborizada Levité Pera 1,5 Lts.</a>