Backend: - Add Swagger annotations to all job handlers (GET, POST, PUT, DELETE) - Clean up job handler code Frontend: - Expand api.ts with ApiJob types, pagination, and transform function - Update footer with 'Vagas por Tecnologia' SEO links - Add robots.txt with crawler directives - Add sitemap.xml with main pages and job URLs - Change branding to GoHorse Jobs
86 lines
2.3 KiB
Markdown
86 lines
2.3 KiB
Markdown
# 🐴 JobScraper MultiSite
|
||
|
||
Raspador de vagas de emprego multi-plataforma para sites de tecnologia brasileiros.
|
||
|
||
## 📁 Estrutura do Projeto
|
||
|
||
```
|
||
JobScraper_MultiSite/
|
||
├── main_scraper.py # Arquivo principal
|
||
├── scrapers/ # Módulos de raspagem por site
|
||
│ ├── __init__.py
|
||
│ ├── programathor_scraper.py
|
||
│ └── geekhunter_scraper.py
|
||
├── output/ # Arquivos CSV gerados
|
||
│ └── vagas_consolidadas.csv
|
||
├── requirements.txt
|
||
└── README.md
|
||
```
|
||
|
||
## 🚀 Instalação
|
||
|
||
```bash
|
||
# Criar ambiente virtual (recomendado)
|
||
python -m venv venv
|
||
source venv/bin/activate # Linux/Mac
|
||
# ou: venv\Scripts\activate # Windows
|
||
|
||
# Instalar dependências
|
||
pip install -r requirements.txt
|
||
|
||
# Ou instalar manualmente:
|
||
pip install requests beautifulsoup4 pandas
|
||
```
|
||
|
||
## ▶️ Execução
|
||
|
||
```bash
|
||
# Executar raspagem de todos os sites
|
||
python main_scraper.py
|
||
|
||
# Testar um scraper individual
|
||
python -m scrapers.programathor_scraper
|
||
```
|
||
|
||
## 📊 Output
|
||
|
||
Os resultados são salvos na pasta `output/`:
|
||
- `vagas_consolidadas.csv` - Versão mais recente
|
||
- `vagas_consolidadas_YYYYMMDD_HHMMSS.csv` - Versões com timestamp
|
||
|
||
### Campos extraídos:
|
||
| Campo | Descrição |
|
||
|-------------|------------------------------|
|
||
| titulo | Título da vaga |
|
||
| empresa | Nome da empresa |
|
||
| localizacao | Localização/Modalidade |
|
||
| link | URL da vaga |
|
||
| fonte | Site de origem |
|
||
|
||
## ➕ Adicionando Novos Sites
|
||
|
||
1. Crie um novo arquivo em `scrapers/` (ex: `novosite_scraper.py`)
|
||
2. Implemente a função `scrape_novosite()` seguindo o padrão existente
|
||
3. Adicione ao dicionário `SITES` em `main_scraper.py`:
|
||
|
||
```python
|
||
from scrapers.novosite_scraper import scrape_novosite
|
||
|
||
SITES = {
|
||
'programathor': scrape_programathor,
|
||
'geekhunter': scrape_geekhunter,
|
||
'novosite': scrape_novosite, # Novo!
|
||
}
|
||
```
|
||
|
||
## ⚠️ Boas Práticas Anti-Bloqueio
|
||
|
||
- ✅ Sempre use `time.sleep()` entre requisições (mínimo 2s)
|
||
- ✅ Use headers que simulem um navegador real
|
||
- ✅ Não faça muitas requisições em sequência rápida
|
||
- ✅ Respeite o `robots.txt` de cada site
|
||
- ✅ Considere usar proxies para grandes volumes
|
||
|
||
## 📝 Licença
|
||
|
||
Uso educacional. Respeite os Termos de Serviço de cada site.
|