LegisDados: estrutura de diretórios

2 views
Skip to first unread message

Helder Ribeiro

unread,
Oct 28, 2009, 7:17:17 PM10/28/09
to parlamen...@googlegroups.com
Oi pessoal,

Documentei um pouco melhor a estrutura de diretórios para os dados de
saída que teremos em comum entre os scripts de raspagem. Estou adaptando
o scraping_legislators.rb e scraping_legislators_details.rb para se
adequarem a esse padrão. Sugestões e comentários são bem-vindos.

Abraços,

Helder
--
http://helderribeiro.net
http://twitter.com/obvio171
Mobile: +55 (19) 9182-7595

Helder Ribeiro

unread,
Oct 28, 2009, 7:19:32 PM10/28/09
to parlamen...@googlegroups.com

Eduardo Leoni

unread,
Oct 28, 2009, 7:48:53 PM10/28/09
to parlamen...@googlegroups.com
Duas sugestões:

1) Eu preferiria  que o download mantivesse a estrutura de diretórios da câmara.


No final, teríamos uma espécie de "mirror" da câmara. Até a gente conseguir um acesso melhor à base de dados deles acho a melhor opção.

2) O que fazer quando um script depende de outro? Por esse motivo prefiro que o diretório raiz aponte para cima do de dados.


-e





2009/10/28 Helder Ribeiro <hel...@gmail.com>

Helder Ribeiro

unread,
Oct 29, 2009, 11:50:39 AM10/29/09
to parlamen...@googlegroups.com
2009/10/28 Eduardo Leoni <e.l...@gmail.com>:
> Duas sugestões:
> 1) Eu preferiria  que o download mantivesse a estrutura de diretórios da
> câmara.
> http://svn.congressoaberto.com/br_chamber/source_data/www.camara.gov.br/
> No final, teríamos uma espécie de "mirror" da câmara. Até a gente conseguir
> um acesso melhor à base de dados deles acho a melhor opção.

Boa!

> 2) O que fazer quando um script depende de outro? Por esse motivo prefiro
> que o diretório raiz aponte para cima do de dados.

Quando um usa informação coletada pelo outro, é sempre melhor fazê-lo
depender do dado já parseado ao invés do baixado. Mais fácil de
programar.

É melhor fazer a dependência ser em relação a um *arquivo de dado* do
que em relação a um script pra eles poderem ser independentes, de
linguagens diferentes e tal. Por exemplo, o script pra baixar os
detalhes dos deputados depende do CSV gerado com o índice deles (com
ID, nome parlamentar, estado e partido). É melhor fazer ele checar se
o CSV existe do que fazê-lo chamar, através de "require", o script que
raspa o índice.

Não entendi o que você quis dizer com a última frase.

Helder Ribeiro

unread,
Oct 29, 2009, 12:05:54 PM10/29/09
to parlamen...@googlegroups.com
2009/10/29 Helder Ribeiro <hel...@gmail.com>:
> 2009/10/28 Eduardo Leoni <e.l...@gmail.com>:
>> Duas sugestões:
>> 1) Eu preferiria  que o download mantivesse a estrutura de diretórios da
>> câmara.
>> http://svn.congressoaberto.com/br_chamber/source_data/www.camara.gov.br/
>> No final, teríamos uma espécie de "mirror" da câmara. Até a gente conseguir
>> um acesso melhor à base de dados deles acho a melhor opção.
>
> Boa!

Hm... O chato disso é que pra, deixar igual, os nomes dos arquivos
teriam que ser uma coisa bizarra, com os parâmetros da URL, acentos
escapados, etc. Acho um trabalho meio desnecessário. E como a troca de
informação entre os scripts é feita com os arquivos *de saída*, acho
que não faz muita diferença como cada script armazena seu
"source_data".

Eduardo Leoni

unread,
Oct 29, 2009, 12:38:25 PM10/29/09
to parlamen...@googlegroups.com
O wget toma conta dos nomes, e você pode passar a opção pra ele pra fazer o download só quando necessário. 

> É melhor fazer a dependência ser em relação a um *arquivo de dado* do
> que em relação a um script pra eles poderem ser independentes, de
> linguagens diferentes e tal.  Por exemplo, o script pra baixar os
> detalhes dos deputados depende do CSV gerado com o índice deles (com
> ID, nome parlamentar, estado e partido). É melhor fazer ele checar se
> o CSV existe do que fazê-lo chamar, através de "require", o script que
> raspa o índice.
>

Tem várias dependências entre meus scripts. Mas posso criar um pacote (algo tipo um "gem" do ruby) pra tomar conta disso. Eventualmente.
 
>  Não entendi o que você quis dizer com a última frase.

Eu estava pensando na estrutura que já temos

legisdados
legisdados/data
legisdados/lib

e o "directory" aponta pra "legisdados" (não legisdados/data)

Acho que o público alvo dos scripts  não deve ser alguém que vai fazer o scrape de uma proposição... mas alguém que vai recriar o repositório de dados do zero. Se for isso mesmo, assumir uma estrutura de dados e scripts é uma boa. 




Helder Ribeiro

unread,
Oct 29, 2009, 12:57:20 PM10/29/09
to parlamen...@googlegroups.com
2009/10/29 Eduardo Leoni <e.l...@gmail.com>:
> O wget toma conta dos nomes, e você pode passar a opção pra ele pra fazer o
> download só quando necessário.

Hmm, verdade! Show!

>>
>> > É melhor fazer a dependência ser em relação a um *arquivo de dado* do
>> > que em relação a um script pra eles poderem ser independentes, de
>> > linguagens diferentes e tal.  Por exemplo, o script pra baixar os
>> > detalhes dos deputados depende do CSV gerado com o índice deles (com
>> > ID, nome parlamentar, estado e partido). É melhor fazer ele checar se
>> > o CSV existe do que fazê-lo chamar, através de "require", o script que
>> > raspa o índice.
>> >
>
> Tem várias dependências entre meus scripts. Mas posso criar um pacote (algo
> tipo um "gem" do ruby) pra tomar conta disso. Eventualmente.

Ah, esse tipo de dependência. Bom, o que eu tenho agora é código sendo
reutilizado pra parte de parâmetros da linha de comando. Pra esse tipo
de coisa acho que é bom sim reusar, e a gente assume uma estrutura de
diretórios pros scripts, sem problema. Eu mesmo tô assumindo que os
meus tão no mesmo diretório. Não acho necessário pensar em pacotes,
etc., pelo menos não agora.

É verdade. Pra quem quiser coisas poucas, selecionadas, vai ser muito
melhor usar a API web quando tivermos uma, então não temos que nos
preocupar com isso no nível dos scripts.

Como você disse, o objetivo que eu pensei é o cara fazer simplesmente:

$ git clone git://github.com/legisdados/legisdados
$ cd legisdados
$ rake

E aí ele já tem:

legisdados/data
legisdados/source_data

com tudo o que ele precisa. E depois disso é só dar um:
$ rake update

e os scripts pegam as atualizações. Aí o cara bota isso num cron job e pronto.

A estura do /source_data, inclusive, acho melhor ficar fora do /data,
como acima. Ficam em diretórios totalmente separados. Até porque
depois, quando formos oferecer o /data por rsync, a maioria das
pessoas não vai querer pegar o /source_data junto. E aí no source_data
nem precisa daquele lance de br_chamber, etc. Dá pra usar só o formato
que vc sugeriu:

/source_data/www.camara.gov.br
/source_data/www.senado.gov.br
/source_data/www.al.sp.gov.br
...
etc.

Helder Ribeiro

unread,
Oct 29, 2009, 5:23:59 PM10/29/09
to parlamen...@googlegroups.com
2009/10/29 Helder Ribeiro <hel...@gmail.com>:
> 2009/10/29 Eduardo Leoni <e.l...@gmail.com>:
>> O wget toma conta dos nomes, e você pode passar a opção pra ele pra fazer o
>> download só quando necessário.
>
> Hmm, verdade! Show!

Botei essas mudanças no scraping_legislators.rb. Separei /data e
/source_data também. Por padrão ele salva em ./data e ./source_data
(que, se chamados de dentro do /legisdados, fica como eu tinha dito
abaixo), e também aceita os parâmetros -d e -s (--data e
--source-data).

http://github.com/obvio171/legisdados/commit/adeb82036d0b314b908abf9b7c135900db6c001d
Reply all
Reply to author
Forward
0 new messages