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

Adição de dicas para novos contribuintes [Escrevendo um novo spider] #59

Closed
wants to merge 2 commits into from
Closed
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
120 changes: 117 additions & 3 deletions docs/source/escrevendo-um-novo-spider.rst
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,110 @@ fora do período desejado.
Algumas dicas
-------------

- Durante o desenvolvimento, para evitar que você faça chamadas repetidas nas páginas das cidades é possível utilizar a configuração `HTTPCACHE_ENABLED`_ do Scrapy. Isso também faz com que as execuções sejam mais rápidas, já que todos os dados ficam armazenados localmente
- O `shell`_ do Scrapy ajuda muito na hora de testar seletores CSS e XPath
Logicas de spiders já estabelecidas
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Antes de começar a analise do site, vale a pena verificar se por a caso a logica dele já foi trabalhada em alguma das nossas ``class`` preestabelecida.

Elas são:

- `Aplus`_
- `Doem`_
- `Dosp`_
- `Fecam`_
- `Imprensa-Oficial`_
- `instar`_
- `Sigpub`_


Analise se o dominio do site se encaixa em algum deles.

Como os diarios de Nossa Senhora do Socorro ``https://doem.org.br/se/nossasenhoradosocorro/diarios`` que tem o dominio ``Doem`` o qual você vai encontrar um ``class`` que trabalha esse sistema em `Doem`_.

*Onde se encontra:*

.. code-block:: sh

/data_collection/gazette/spiders/base


*Exemplo de como utilizar:*


Basicamente localizado uma ``class`` que você pode estar utilizando na sua spider.

Basta criar uma novo arquivo dentro de:

.. code-block:: sh

/data_collection/gazette/spiders


Import a ``class`` selecionada para o arquivo spider que esta trabalhando. Normalmente import ``date`` de ``datetime`` para preencher ``start_date``

.. code-block:: python

from gazette.spiders.base.doem import DoemGazetteSpider
from datetime import date

Crie uma nova ``class`` com a class preestabelecida selecionada como herança (``DoemGazetteSpider`` no nosso exemplo).

.. code-block:: python

class BaAcajutibaSpider(DoemGazetteSpider):
TERRITORY_ID = "2900306"
name = "ba_acajutiba"
start_date = date(2018, 1, 2)
state_city_url_part = "ba/acajutiba"

Exemplo do Script completo ➡️ `Link`_


Tempo de coleta
^^^^^^^^^^^^^^^

Cuidado com o tempo que as vezes o spider leva para realizar toda a operação. As vezes é necessario notificar isso no seu PR, para uma mudança no disparador de rotina dessa spider.

**O tempo limite de coleta é de 1 hora nas rotinas de coleta**

Spiders com mais de um site de coleta
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Bom verificar se todos os diarios estão disponiveis em um ou mais sites. Caso esteja em mais de um site, tome a abordagem que se encontra aqui ➡️ `849`_

HTTPCACHE_ENABLED
^^^^^^^^^^^^^^^^^

Durante o desenvolvimento, para evitar que você faça chamadas repetidas nas páginas das cidades é possível utilizar a configuração `HTTPCACHE_ENABLED`_ do Scrapy. Isso também faz com que as execuções sejam mais rápidas, já que todos os dados ficam armazenados localmente

*Exemplo:*

Primeiro vã no diretorio abaixo. Onde você iria encontrar algumas configuraçoes do Scrapy.

.. code-block:: sh

/data_collection/gazette/settings.pys

Dentro do arquivo ``settings.pys``. Crei uma nova linha e insira ``HTTPCACHE_ENABLED = True`` como no exemplo:

.. code-block:: python

import pkg_resources
from decouple import config

BOT_NAME = "gazette"
SPIDER_MODULES = ["gazette.spiders"]
NEWSPIDER_MODULE = "gazette.spiders"
ROBOTSTXT_OBEY = False

HTTPCACHE_ENABLED = True

Para desativas, apenas apague a linha do ``HTTPCACHE_ENABLED = True`` ou a troque por ``HTTPCACHE_ENABLED = False``

Shell
^^^^^

O `shell`_ do Scrapy ajuda muito na hora de testar seletores CSS e XPath

Submetendo um novo PR
---------------------
Expand All @@ -113,5 +215,17 @@ Sugestões de verificações:
- Se ao executar o spider mais de uma vez, os resultados são os mesmos;
- Se não existem erros de execução (`log/ERROR` nas estatísticas do spider);

.. _Link: https://github.com/Winzen/querido-diario/blob/doc-changes/data_collection/gazette/spiders/ba_acajutiba.py

.. _849: https://github.com/okfn-brasil/querido-diario/pull/849

.. _Aplus: https://github.com/okfn-brasil/querido-diario/blob/main/data_collection/gazette/spiders/base/aplus.py
.. _Doem: https://github.com/okfn-brasil/querido-diario/blob/main/data_collection/gazette/spiders/base/doem.py
.. _Dosp: https://github.com/okfn-brasil/querido-diario/blob/main/data_collection/gazette/spiders/base/dosp.py
.. _Fecam: https://github.com/okfn-brasil/querido-diario/blob/main/data_collection/gazette/spiders/base/fecam.py
.. _Imprensa-Oficial: https://github.com/okfn-brasil/querido-diario/blob/main/data_collection/gazette/spiders/base/imprensa_oficial.py
.. _instar: https://github.com/okfn-brasil/querido-diario/blob/main/data_collection/gazette/spiders/base/instar.py
.. _Sigpub: https://github.com/okfn-brasil/querido-diario/blob/main/data_collection/gazette/spiders/base/sigpub.py

.. _shell: https://docs.scrapy.org/en/latest/topics/shell.html
.. _HTTPCACHE_ENABLED: https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-enabled
.. _HTTPCACHE_ENABLED: https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-enabled