Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docs: Documenta o Makefile #967

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 66 additions & 19 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,32 +1,79 @@
# Define cores para o terminal.
BOLD := $(shell tput bold)
RED := $(shell tput -Txterm setaf 1)
GREEN := $(shell tput -Txterm setaf 2)
BLUE := $(shell tput -Txterm setaf 6)
RESET := $(shell tput -Txterm sgr0)

# Define argumentos do isort
ISORT_ARGS := --combine-star --combine-as --order-by-type --thirdparty scrapy --multi-line 3 --trailing-comma --force-grid-wrap 0 --use-parentheses --line-width 88

# Define diretório de dados.
SRC_DIRS := ./data_collection

check:
python3 -m isort --check --diff $(ISORT_ARGS) $(SRC_DIRS)
python3 -m black --check $(SRC_DIRS)
flake8 $(SRC_DIRS)
# Define o nome do ambiente virtual.
VENV_DIR = $(shell pwd)/.venv/bin/activate

# Proteção contra comandos que possam ter o mesmo nome de variáveis
.PHONY: all help check format run_spider sql clean shell run_spider_since compile install

all: install

help: ## Mostra ajuda para os comandos do Makefile.
@echo "$(BOLD)$(BLUE)Comandos disponíveis:$(RESET)"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9 -]+:.*?## / {printf "$(BOLD)$(GREEN)%-20s$(RESET)%s\n", $$1, $$2}' $(MAKEFILE_LIST)

format:
python3 -m isort --apply $(ISORT_ARGS) $(SRC_DIRS)
python3 -m black $(SRC_DIRS)
install: .venv/bin/activate ## Prepara o ambiente de desenvolvimento.
@python3 -m pip install --upgrade pip

run_spider:
cd $(SRC_DIRS) && scrapy crawl $(SPIDER)
check: ## Verifica os estilos de código com isort, black, e flake8.
@echo "$(BOLD)$(BLUE)Verificando estilos e formatos...$(RESET)"
. $(VENV_DIR)
@python3 -m isort --check --diff $(ISORT_ARGS) $(SRC_DIRS) || echo "$(RED)Checagem do isort falhou$(RESET)"
@python3 -m black --check $(SRC_DIRS) || echo "$(RED)Checkagem do black falhou$(RESET)"
@flake8 $(SRC_DIRS) || echo "$(RED)Checagem do flake8 falhou$(RESET)"

sql:
cd $(SRC_DIRS) && sqlite3 querido-diario.db
format: ## Formata o código usando isort e black.
@echo "$(BOLD)$(BLUE)Formatando o código...$(RESET)"
. $(VENV_DIR)
@python3 -m isort --apply $(ISORT_ARGS) $(SRC_DIRS) || echo "$(RED)Formatação do isort falhou$(RESET)"
@python3 -m black $(SRC_DIRS) || echo "$(RED)Formatação do black falhou$(RESET)"

clean:
find ./$(SRC_DIRS)/data/* -type d -exec rm -rv {} \;
run_spider: ## Roda um spider do Scrapy.
@echo "$(BOLD)$(BLUE)Rodando Spider: $(SPIDER)...$(RESET)"
. $(VENV_DIR)
@cd $(SRC_DIRS) && scrapy crawl $(SPIDER)

shell:
cd $(SRC_DIRS) && scrapy shell
sql: ## Inicia o shell interativo do SQLite3.
@echo "$(BOLD)$(BLUE)Inicializando SQLite3 shell...$(RESET)"
. $(VENV_DIR)
@cd $(SRC_DIRS) && sqlite3 querido-diario.db

run_spider_since:
cd $(SRC_DIRS) && scrapy crawl -a start_date=$(START_DATE) $(SPIDER)
clean: ## Limpando os diretórios de dados.
@echo "$(BOLD)$(BLUE)Limpando o diretório de dados...$(RESET)"
. $(VENV_DIR)
@find ./$(SRC_DIRS)/data/* -type d -exec rm -rv {} \;
@echo "$(GREEN)Limpeza completa.$(RESET)"

compile:
cd data_collection; \
shell: ## Inicia o shell interativo do Scrapy.
@echo "$(BOLD)$(BLUE)Inicializando o shell interativo...$(RESET)"
. $(VENV_DIR)
@cd $(SRC_DIRS) && scrapy shell

run_spider_since: ## Roda um spider do Scrapy com data de início.
@echo "$(BOLD)$(BLUE)Inicializando spider com data definida: $(START_DATE)...$(RESET)"
. $(VENV_DIR)
@cd $(SRC_DIRS) && scrapy crawl -a start_date=$(START_DATE) $(SPIDER)

compile: ## Compila os arquivos requirements.in e requirements-dev.in.
@echo "$(BOLD)$(BLUE)Compilando requerimentos, por favor aguarde...$(RESET)"
. $(VENV_DIR)
@cd data_collection; \
pip-compile --upgrade --no-annotate --allow-unsafe --generate-hashes requirements.in; \
pip-compile --upgrade --no-annotate --allow-unsafe --generate-hashes requirements-dev.in

.venv/bin/activate: data_collection/requirements-dev.txt
@echo "$(BOLD)$(BLUE)Preparando ambiente de desenvolvimento, por favor aguarde...$(RESET)"
@python3 -m venv .venv
@. $(VENV_DIR)
pip install -r data_collection/requirements-dev.txt && pre-commit install || echo "$(RED)Erro ao instalar dependências.$(RESET)"
18 changes: 13 additions & 5 deletions docs/README-en-US.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
**English (US)** | [Português (BR)](/docs/README.md)
**English (US)** | [Português (BR)](/docs/README.md)

<p align="center">
<a href="https://queridodiario.ok.org.br/sobre" target="_blank"> <img alt="Querido Diário" src="./images/querido-diario-logo.png" width="200">
Expand All @@ -21,11 +21,11 @@ Find out more about [technologies](https://queridodiario.ok.org.br/tecnologia) a
- [License](#license)

# How to contribute
<p>
<a href="https://www.catarse.me/queridodiario-okbr" target="_blank">
<p>
<a href="https://www.catarse.me/queridodiario-okbr" target="_blank">
<img alt="catarse" src="https://img.shields.io/badge/Catarse-Apoie%20o%20projeto-orange?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMyNSA0NTUiIHdpZHRoPSIzMjUiIGhlaWdodD0iNDU1Ij4KCTx0aXRsZT5sb2dvLXYtY29yLXBvc2l0aXZvLWFpPC90aXRsZT4KCTxzdHlsZT4KCQkuczAgeyBmaWxsOiAjMTdhMzM4IH0gCgkJLnMxIHsgZmlsbDogIzdkYjkzZCB9IAoJCS5zMiB7IGZpbGw6ICNmMmJmMDAgfSAKCQkuczMgeyBmaWxsOiAjZjE5MTA2IH0gCgkJLnM0IHsgZmlsbDogI2VhNjYwYiB9IAoJCS5zNSB7IGZpbGw6ICNkZTMyODEgfSAKCTwvc3R5bGU+Cgk8ZyBpZD0iTGF5ZXIgMSI+CgkJPGcgaWQ9IiZsdDtHcm91cCZndDsiPgoJCQk8cGF0aCBpZD0iJmx0O1BhdGgmZ3Q7IiBjbGFzcz0iczAiIGQ9Im01Ni40IDI1Ni40cS0xLjggMy4xLTMuNCA2LjRjLTE1LjQgMzMuMS00LjcgNjMuMSAxNC44IDkyLjQgMTEuNiAxNy40IDguNiAzNi40LTEuOSA0Ny4zLTYgNi4zLTE0LjUgOS44LTIzLjIgOS43LTQuNSAwLTkuMS0wLjktMTMuNS0zLTYuMy0yLjktMTUuMS05LjEtMjIuMi0yOC43LTguOS0yNC4yLTkuMS01MS42IDIuNi03Ni44IDEwLjEtMjEuNiAyNi45LTM3LjggNDYuOC00Ny4zeiIvPgoJCQk8cGF0aCBpZD0iJmx0O1BhdGgmZ3Q7IiBjbGFzcz0iczEiIGQ9Im00Ni41IDMwNS44YzAuNSAyLjYgMSA1LjIgMS43IDcuOCAxMC41IDM4LjcgNDAuNyA1Ni41IDc3LjggNjcuNCAyMi4xIDYuNSAzMyAyNC43IDMxLjkgNDEuMi0wLjcgOS42LTUuMyAxOC41LTEyLjcgMjQuNi0zLjggMy4yLTguNCA1LjctMTMuNSA3LTcuNCAyLTE5LjIgMy0zOS4xLTguNC0yNC41LTE0LjItNDQuMS0zNy4yLTUyLTY2LjctNi44LTI1LjItNC4xLTUwLjggNS45LTcyLjl6Ii8+CgkJCTxwYXRoIGlkPSImbHQ7UGF0aCZndDsiIGNsYXNzPSJzMiIgZD0ibTczLjIgMzU0LjVjMi4yIDEuOCA0LjUgMy42IDYuOSA1LjMgMzYuMiAyNS4zIDc0LjMgMTguOSAxMTMuMiAxLjggMjMuMi0xMC4xIDQ1LjMtMi41IDU2IDEyLjIgNi4zIDguNiA4LjYgMTkuNCA2LjggMjkuNy0xIDUuNC0zLjEgMTAuNy02LjUgMTUuNS00LjggNi45LTE0IDE2LjEtMzguOSAyMC41LTMwLjcgNS40LTYzLjQtMC4xLTkwLjktMTkuNC0yMy42LTE2LjUtMzkuNC0zOS45LTQ2LjYtNjUuNnoiLz4KCQkJPHBhdGggaWQ9IiZsdDtQYXRoJmd0OyIgY2xhc3M9InMzIiBkPSJtMTMwLjEgMzc2LjZxNC43IDAuMSA5LjUtMC40YzQ4LjQtNC4zIDc2LTM2LjUgOTYuNy03OC41IDEyLjQtMjUgMzYuNC0zNC4xIDU1LjgtMjkuMyAxMS40IDIuOCAyMSAxMC4yIDI2LjcgMjAuMyAzIDUuMiA1IDExLjEgNS41IDE3LjYgMC45IDkuMi0wLjQgMjMuNC0xOC4zIDQ0LjctMjIgMjYuMy01My41IDQ0LjgtOTAuMyA0OC0zMS41IDIuOC02MS40LTUuOC04NS42LTIyLjR6Ii8+CgkJCTxwYXRoIGlkPSImbHQ7UGF0aCZndDsiIGNsYXNzPSJzNCIgZD0ibTE5My42IDM1NS4xYzIuNy0yLjIgNS4zLTQuNiA3LjgtNy4xIDM3LjctMzcuOCAzOC4xLTg0LjUgMjUuOS0xMzQuNS03LjItMjkuOCA2LjUtNTQuNSAyNi4zLTY0LjIgMTEuNS01LjYgMjQuOS02LjEgMzYuOC0xLjggNi4zIDIuMyAxMi4xIDUuOSAxNy4xIDExIDcuMiA3LjEgMTYuMiAyMC4xIDE2LjMgNTAuNiAwIDM3LjctMTMuNSA3NS42LTQyLjIgMTA0LjMtMjQuNiAyNC43LTU1LjkgMzguNi04OCA0MS43eiIvPgoJCQk8cGF0aCBpZD0iJmx0O1BhdGgmZ3Q7IiBjbGFzcz0iczUiIGQ9Im0yMzEuOSAyOTJjMC44LTQuNCAxLjQtOC45IDEuOC0xMy41IDYtNjkuMi0zMi42LTExNi04Ni41LTE1NS43LTMyLjItMjMuNi0zOS4xLTU5LjYtMjcuNS04NS44IDYuNy0xNS4zIDE5LjctMjcgMzUuMi0zMi42IDguMS0yLjkgMTctNC4yIDI2LjEtMy40IDEzLjIgMS4xIDMzIDYuNSA1OC42IDM2LjkgMzEuNSAzNy41IDQ5LjcgODYuNSA0NS4xIDEzOS4xLTMuOSA0NS4xLTIzLjQgODUuMS01Mi44IDExNXoiLz4KCQk8L2c+Cgk8L2c+Cjwvc3ZnPg==">
</a>
</p>
</p>

Thank you for considering contributing to Querido Diário! :tada:

Expand All @@ -38,6 +38,14 @@ You need to have [Python](https://docs.python.org/3/) (+3.0) and [Scrapy](https:

The commands below set it up in Linux operating system. They consist of creating a [virtual Python environment](https://docs.python.org/3/library/venv.html), installing the requirements listed in `requirements-dev` and the code standardization tool `pre-commit`.

Run the make command to get the entire environment ready:

```sh
make
```

Alternatively, you can run the commands below to create the virtual environment and install the requirements:

``` console
python3 -m venv .venv
source .venv/bin/activate
Expand Down Expand Up @@ -115,4 +123,4 @@ All work produced by OKBR is openly and freely available.

# License

Code licensed under the [MIT License](/LICENSE.md).
Code licensed under the [MIT License](/LICENSE.md).
41 changes: 25 additions & 16 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
**Português (BR)** | [English (US)](/docs/README-en-US.md)
**Português (BR)** | [English (US)](/docs/README-en-US.md)

<p align="center">
<a href="https://queridodiario.ok.org.br/sobre" target="_blank"> <img alt="Querido Diário" src="./images/querido-diario-logo.png" width="200">
Expand All @@ -22,23 +22,32 @@ Conheça mais sobre as [tecnologias](https://queridodiario.ok.org.br/tecnologia)
- [Licença](#licença)

# Como contribuir
<p>
<a href="https://www.catarse.me/queridodiario-okbr" target="_blank">
<p>
<a href="https://www.catarse.me/queridodiario-okbr" target="_blank">
<img alt="catarse" src="https://img.shields.io/badge/Catarse-Apoie%20o%20projeto-orange?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMyNSA0NTUiIHdpZHRoPSIzMjUiIGhlaWdodD0iNDU1Ij4KCTx0aXRsZT5sb2dvLXYtY29yLXBvc2l0aXZvLWFpPC90aXRsZT4KCTxzdHlsZT4KCQkuczAgeyBmaWxsOiAjMTdhMzM4IH0gCgkJLnMxIHsgZmlsbDogIzdkYjkzZCB9IAoJCS5zMiB7IGZpbGw6ICNmMmJmMDAgfSAKCQkuczMgeyBmaWxsOiAjZjE5MTA2IH0gCgkJLnM0IHsgZmlsbDogI2VhNjYwYiB9IAoJCS5zNSB7IGZpbGw6ICNkZTMyODEgfSAKCTwvc3R5bGU+Cgk8ZyBpZD0iTGF5ZXIgMSI+CgkJPGcgaWQ9IiZsdDtHcm91cCZndDsiPgoJCQk8cGF0aCBpZD0iJmx0O1BhdGgmZ3Q7IiBjbGFzcz0iczAiIGQ9Im01Ni40IDI1Ni40cS0xLjggMy4xLTMuNCA2LjRjLTE1LjQgMzMuMS00LjcgNjMuMSAxNC44IDkyLjQgMTEuNiAxNy40IDguNiAzNi40LTEuOSA0Ny4zLTYgNi4zLTE0LjUgOS44LTIzLjIgOS43LTQuNSAwLTkuMS0wLjktMTMuNS0zLTYuMy0yLjktMTUuMS05LjEtMjIuMi0yOC43LTguOS0yNC4yLTkuMS01MS42IDIuNi03Ni44IDEwLjEtMjEuNiAyNi45LTM3LjggNDYuOC00Ny4zeiIvPgoJCQk8cGF0aCBpZD0iJmx0O1BhdGgmZ3Q7IiBjbGFzcz0iczEiIGQ9Im00Ni41IDMwNS44YzAuNSAyLjYgMSA1LjIgMS43IDcuOCAxMC41IDM4LjcgNDAuNyA1Ni41IDc3LjggNjcuNCAyMi4xIDYuNSAzMyAyNC43IDMxLjkgNDEuMi0wLjcgOS42LTUuMyAxOC41LTEyLjcgMjQuNi0zLjggMy4yLTguNCA1LjctMTMuNSA3LTcuNCAyLTE5LjIgMy0zOS4xLTguNC0yNC41LTE0LjItNDQuMS0zNy4yLTUyLTY2LjctNi44LTI1LjItNC4xLTUwLjggNS45LTcyLjl6Ii8+CgkJCTxwYXRoIGlkPSImbHQ7UGF0aCZndDsiIGNsYXNzPSJzMiIgZD0ibTczLjIgMzU0LjVjMi4yIDEuOCA0LjUgMy42IDYuOSA1LjMgMzYuMiAyNS4zIDc0LjMgMTguOSAxMTMuMiAxLjggMjMuMi0xMC4xIDQ1LjMtMi41IDU2IDEyLjIgNi4zIDguNiA4LjYgMTkuNCA2LjggMjkuNy0xIDUuNC0zLjEgMTAuNy02LjUgMTUuNS00LjggNi45LTE0IDE2LjEtMzguOSAyMC41LTMwLjcgNS40LTYzLjQtMC4xLTkwLjktMTkuNC0yMy42LTE2LjUtMzkuNC0zOS45LTQ2LjYtNjUuNnoiLz4KCQkJPHBhdGggaWQ9IiZsdDtQYXRoJmd0OyIgY2xhc3M9InMzIiBkPSJtMTMwLjEgMzc2LjZxNC43IDAuMSA5LjUtMC40YzQ4LjQtNC4zIDc2LTM2LjUgOTYuNy03OC41IDEyLjQtMjUgMzYuNC0zNC4xIDU1LjgtMjkuMyAxMS40IDIuOCAyMSAxMC4yIDI2LjcgMjAuMyAzIDUuMiA1IDExLjEgNS41IDE3LjYgMC45IDkuMi0wLjQgMjMuNC0xOC4zIDQ0LjctMjIgMjYuMy01My41IDQ0LjgtOTAuMyA0OC0zMS41IDIuOC02MS40LTUuOC04NS42LTIyLjR6Ii8+CgkJCTxwYXRoIGlkPSImbHQ7UGF0aCZndDsiIGNsYXNzPSJzNCIgZD0ibTE5My42IDM1NS4xYzIuNy0yLjIgNS4zLTQuNiA3LjgtNy4xIDM3LjctMzcuOCAzOC4xLTg0LjUgMjUuOS0xMzQuNS03LjItMjkuOCA2LjUtNTQuNSAyNi4zLTY0LjIgMTEuNS01LjYgMjQuOS02LjEgMzYuOC0xLjggNi4zIDIuMyAxMi4xIDUuOSAxNy4xIDExIDcuMiA3LjEgMTYuMiAyMC4xIDE2LjMgNTAuNiAwIDM3LjctMTMuNSA3NS42LTQyLjIgMTA0LjMtMjQuNiAyNC43LTU1LjkgMzguNi04OCA0MS43eiIvPgoJCQk8cGF0aCBpZD0iJmx0O1BhdGgmZ3Q7IiBjbGFzcz0iczUiIGQ9Im0yMzEuOSAyOTJjMC44LTQuNCAxLjQtOC45IDEuOC0xMy41IDYtNjkuMi0zMi42LTExNi04Ni41LTE1NS43LTMyLjItMjMuNi0zOS4xLTU5LjYtMjcuNS04NS44IDYuNy0xNS4zIDE5LjctMjcgMzUuMi0zMi42IDguMS0yLjkgMTctNC4yIDI2LjEtMy40IDEzLjIgMS4xIDMzIDYuNSA1OC42IDM2LjkgMzEuNSAzNy41IDQ5LjcgODYuNSA0NS4xIDEzOS4xLTMuOSA0NS4xLTIzLjQgODUuMS01Mi44IDExNXoiLz4KCQk8L2c+Cgk8L2c+Cjwvc3ZnPg==">
</a>
</p>
</p>

Agradecemos por considerar contribuir com o Querido Diário! :tada:

Você encontra como fazê-lo no [CONTRIBUTING.md](/docs/CONTRIBUTING.md)!

Além disso, consulte a [documentação do Querido Diário](https://docs.queridodiario.ok.org.br/pt/latest/index.html) para te ajudar.
Além disso, consulte a [documentação do Querido Diário](https://docs.queridodiario.ok.org.br/pt/latest/index.html) para te ajudar.

# Ambiente de desenvolvimento
Você precisa ter [Python](https://docs.python.org/3/) (+3.0) e o framework [Scrapy](https://scrapy.org) instalados.
Você precisa ter [Python](https://docs.python.org/3/) (+3.0) e o framework [Scrapy](https://scrapy.org) instalados.

Os comandos abaixo preparam o ambiente em sistema operacional Linux. Eles consistem em criar um [ambiente virtual de Python](https://docs.python.org/pt-br/3/library/venv.html), instalar os requisitos listados em `requirements-dev` e a ferramenta para padronização de código `pre-commit`.

Rode a ferramenta `make` para preparar o ambiente completo:

```sh
make

```

Alternativamente, você pode executar os comandos abaixo para criar o ambiente virtual e instalar os requisitos:

``` console
python3 -m venv .venv
source .venv/bin/activate
Expand All @@ -49,7 +58,7 @@ pre-commit install
> A configuração em outros sistemas operacionais está disponível em ["como configurar o ambiente de desenvolvimento"](/docs/CONTRIBUTING.md#como-configurar-o-ambiente-de-desenvolvimento), incluindo mais detalhes para quem deseja contribuir com o desenvolvimento do repositório.

# Como executar
Para experimentar a execução de um raspador já integrado ao projeto ou testar o que esteja desenvolvendo, siga os comandos:
Para experimentar a execução de um raspador já integrado ao projeto ou testar o que esteja desenvolvendo, siga os comandos:

1. Se ainda não o fez, ative o ambiente virtual no diretório `/querido-diario`:
``` console
Expand All @@ -70,9 +79,9 @@ scrapy crawl <nome_do_raspador> //exemplo: scrapy crawl ba_acajutiba
5. Os diários coletados na raspagem serão salvos no diretório `data_collection/data`

## Dicas de execução
Além dos comandos acima, o Scrapy oferece outros recursos para configurar o comando de raspagem. Os recursos a seguir podem ser usados sozinhos ou combinados.
Além dos comandos acima, o Scrapy oferece outros recursos para configurar o comando de raspagem. Os recursos a seguir podem ser usados sozinhos ou combinados.

* **Limite de data**
* **Limite de data**
Ao executar o item 4, o raspador coletará todos os diários oficiais do site publicador daquele município. Para execuções menores, utilize a flag de atributo `-a` seguida de:

`start_date=AAAA-MM-DD`: definirá a data inicial de coleta de diários.
Expand All @@ -84,24 +93,24 @@ scrapy crawl <nome_do_raspador> -a start_date=<AAAA-MM-DD>
scrapy crawl <nome_do_raspador> -a end_date=<AAAA-MM-DD>
```

* **Arquivo de log**
* **Arquivo de log**
É possível enviar o log da raspagem para um arquivo ao invés de deixá-lo no terminal. Isto é particularmente útil quando se desenvolve um raspador que apresenta problemas e você quer enviar o arquivo de log no seu PR para obter ajuda. Para isso, use a flag de configuração `-s` seguida de:
`LOG_FILE=log_<nome_do_municipio>.txt`: definirá o arquivo para armazenar as mensagens de log.
```console
scrapy crawl <nome_do_raspador> -s LOG_FILE=log_<nome_do_municipio>.txt
```

* **Tabela de raspagem**
* **Tabela de raspagem**
Também é possível construir uma tabela que lista todos os diários e metadados coletados pela raspagem, ficando mais fácil de ver como o raspador está se comportando. Para isso, use a flag de saída `-o` seguida de um nome para o arquivo.
```console
scrapy crawl <nome_do_raspador> -o <nome_do_municipio>.csv
```

# Solução de problemas
Confira o arquivo de [solução de problemas](/docs/TROUBLESHOOTING.md) para resolver os problemas mais frequentes com a configuração do ambiente do projeto.
Confira o arquivo de [solução de problemas](/docs/TROUBLESHOOTING.md) para resolver os problemas mais frequentes com a configuração do ambiente do projeto.

# Suporte
<p>
# Suporte
<p>
<a href="https://go.ok.org.br/discord" target="_blank">
<img alt="Discord Invite" src="https://img.shields.io/badge/Discord-Entre%20no%20servidor-blue?style=for-the-badge&logo=discord" >
</a>
Expand All @@ -127,10 +136,10 @@ Conheça [quem apoia o Querido Diário](https://queridodiario.ok.org.br/apoie#qu
</a>
</p>

A [Open Knowledge Brasil](https://ok.org.br/) é uma organização da sociedade civil sem fins lucrativos, cuja missão é utilizar e desenvolver ferramentas cívicas, projetos, análises de políticas públicas, jornalismo de dados para promover o conhecimento livre nos diversos campos da sociedade.
A [Open Knowledge Brasil](https://ok.org.br/) é uma organização da sociedade civil sem fins lucrativos, cuja missão é utilizar e desenvolver ferramentas cívicas, projetos, análises de políticas públicas, jornalismo de dados para promover o conhecimento livre nos diversos campos da sociedade.

Todo o trabalho produzido pela OKBR está disponível livremente.

# Licença

Código licenciado sob a [Licença MIT](LICENSE.md).
Código licenciado sob a [Licença MIT](LICENSE.md).