API para scrappear información de restaurantes desde Google Maps, especializada en múltiples comunas de Santiago, Chile.
Extraer información detallada de restaurantes de las principales comunas de Santiago para el proyecto Jangri, enfocado en estrategias de descuentos y promociones para restaurantes.
- Las Condes
- Santiago Centro
- Vitacura
- Ñuñoa
- Providencia
- Información básica: Nombre, Descripción, Dirección
- Contacto: Teléfono, Email, Sitio web
- Enlaces: Reservas, Menú, Pedidos, Compartir
- Ubicación: Plus code, Coordenadas
- Horarios: Horarios de apertura/cierre por día
- Reviews: Puntuación, Número total de reseñas
-
Precios: Rango de precios (
$, $ $, $$$) - URLs: Link de Google Maps
- Scraping por comuna individual
- Scraping de todas las comunas
- Generación de archivos JSON separados por comuna
- API REST con múltiples endpoints
- Autenticación con API Key
- Logging detallado
GET /health
GET /scraper/healthGET /scraper/comunasPOST /scraper/restaurants/comunaBody:
{
"comuna": "Santiago Centro",
"max_results": 5
}POST /scraper/restaurants/all-comunasBody:
{
"max_results_per_comuna": 5
}POST /scraper/restaurants/generate-json-filesBody:
{
"max_results_per_comuna": 5
}Python 3.8+
FastAPI
Selenium
Pydantic# 1. Navegar al directorio
cd apis/api_restaurant_scraper
# 2. Crear entorno virtual
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 3. Instalar dependencias
pip install -r requirements.txt
# 4. Configurar variables de entorno
cp .env.example .env
# Editar .env con tu API_KEYAPI_KEY=tu_api_key_secreta_aqui
LOG_LEVEL=INFO# Desarrollo
python main.py
# Con uvicorn
uvicorn main:app --reload --port 8000# Prueba completa de todas las comunas
python test_multi_comuna_scraper.py
# Prueba del scraper original
python test_scraper_local.pycurl -X POST "http://localhost:8000/scraper/restaurants/comuna" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"comuna": "Santiago Centro",
"max_results": 5
}'curl -X POST "http://localhost:8000/scraper/restaurants/all-comunas" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"max_results_per_comuna": 5
}'{
"metadata": {
"comuna": "Santiago Centro",
"total_restaurants": 5,
"scraped_at": "2024-01-15T10:30:00",
"generated_by": "Jangri Restaurant Scraper API"
},
"restaurants": [
{
"name": "Restaurant Central",
"description": "Restaurante tradicional en Santiago Centro",
"location": {
"address": "Compañía 1063, Santiago Centro, Santiago",
"city": "Santiago",
"plus_code": "47RG+23 Santiago"
},
"contact": {
"phone": "+56 2 2664 8200",
"website": "https://centralrestaurant.cl"
},
"links": {
"reservation_link": "https://example.com/reservas",
"menu_link": "https://example.com/menu",
"website_link": "https://centralrestaurant.cl",
"order_link": "https://example.com/pedidos"
},
"hours": [
{
"day_of_week": "Lunes",
"opening_time": "12:00",
"closing_time": "22:00",
"is_closed": false
}
],
"reviews": {
"rating": 4.5,
"total_reviews": 342
},
"pricing": {
"price_range": "$$",
"currency": "CLP"
},
"scraped_at": "2024-01-15T10:30:00",
"google_maps_url": "https://maps.google.com/place/Restaurant+Central"
}
]
}apis/api_restaurant_scraper/
├── main.py # Aplicación FastAPI principal
├── requirements.txt # Dependencias
├── .env.example # Variables de entorno ejemplo
├── dependencies.py # Dependencias y autenticación
├── test_multi_comuna_scraper.py # Script de prueba múltiples comunas
├── test_scraper_local.py # Script de prueba original
├── scraped_data/ # Directorio de archivos JSON generados
├── schemas/
│ └── restaurant_schema.py # Modelos Pydantic
├── services/
│ ├── google_maps_scraper.py # Scraper original
│ └── multi_comuna_scraper.py # Scraper múltiples comunas
└── routers/
└── scraper_router.py # Endpoints de la API
Los archivos JSON se generan automáticamente en el directorio scraped_data/ con nombres como:
restaurantes_las_condes_20240115_103000.jsonrestaurantes_santiago_centro_20240115_103005.jsonrestaurantes_vitacura_20240115_103010.jsonrestaurantes_nunoa_20240115_103015.jsonrestaurantes_providencia_20240115_103020.json
python test_multi_comuna_scraper.py# Probar una comuna específica
curl -X POST "http://localhost:8000/scraper/restaurants/comuna" \
-H "X-API-Key: test_key" \
-H "Content-Type: application/json" \
-d '{"comuna": "Providencia", "max_results": 3}'
# Verificar comunas disponibles
curl "http://localhost:8000/scraper/comunas"-
Error: python command not found
# Usar python3 en lugar de python python3 test_multi_comuna_scraper.py -
Error: No module named 'selenium'
# Activar entorno virtual e instalar dependencias source venv/bin/activate pip install -r requirements.txt
-
Error: API Key requerida
# Configurar .env o usar header export API_KEY=tu_api_key # O en requests: -H "X-API-Key: tu_api_key"
Los logs se guardan en:
- Consola (stdout)
scraper_test.log(para pruebas)- Logs de FastAPI en consola
Esta API está diseñada para integrarse con el ecosistema Jangri:
- Supabase: Los datos pueden ser almacenados en la base de datos
- Apps Frontend: Consumo de datos para mostrar restaurantes
- API Descuentos: Integración para aplicar descuentos por zona
- Scraping real con Selenium
- Integración directa con Supabase
- Más comunas de Santiago
- Cache de resultados
- Rate limiting
- Scraping incremental
Para dudas o problemas, contactar al equipo de desarrollo de Jangri.