okfn-brasil / querido-diario

📰 Diários oficiais brasileiros acessíveis a todos | 📰 Brazilian government gazettes, accessible to everyone.
https://queridodiario.ok.org.br/
MIT License
1.11k stars 409 forks source link

Rio de Janeiro/RJ [wip] #15

Closed brunolellis closed 6 years ago

brunolellis commented 6 years ago

Iniciei uma implementação da cidade do Rio de Janeiro. Pareceu trabalhosa inicialmente, mas acho que consegui mapear todas as situações.

O que desenvolvi por enquanto: https://github.com/brunolellis/diario-oficial/blob/rj_rio_de_janeiro/processing/data_collection/gazette/spiders/rj_rio_de_janeiro.py

DO: http://doweb.rio.rj.gov.br

brunolellis commented 6 years ago

Consegui evoluir com o crawler do Rio de Janeiro, mas parei no seguinte problema: A URL para download do pdf é a seguinte: http://doweb.rio.rj.gov.br/ler_pdf.php?download=ok&edi_id=3651

Investigando os response headers, o servidor envia o nome do arquivo final no cabeçalho 'Content-Disposition' e, aparentemente, o scrapy está ignorando esta informação e salvando o pdf com o seguinte nome: 4f15e18052b51dd8dffad1cc243279f40a2e21c3.php?download=ok&edi_id=3651

E isto ocasiona o seguinte problema na conversão para texto:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/mnt/code/data_collection/gazette/pipelines.py", line 13, in process_item
    item['source_text'] = self.pdf_source_text(item)
  File "/mnt/code/data_collection/gazette/pipelines.py", line 28, in pdf_source_text
    with open(text_path) as file:
FileNotFoundError: [Errno 2] No such file or directory: '/mnt/data/full/4f15e18052b51dd8dffad1cc243279f40a2e21c3.php?download=ok&edi_id=3651.txt'

@Irio, por favor, alguma ideia pra resolver isto?

brunolellis commented 6 years ago

Achei uma luz. Veja este trecho do código do scrapy, onde ele monta o nome do arquivo (media_ext) aqui.

No exemplo citado acima, retorna: '.php?download=ok&edi_id=3651'

Talvez uma opção seja implementar algo semelhante e ignorar os query params.

cuducos commented 6 years ago

@brunolellis: tem um PR para corrigir isso no Scrapy desde julho/2017. Há uns dias foi colocado no pipeline para a versão 1.6…

@rennerocha: desculpe te marcar de surpresa aqui, mas tu tem ideia de alguma forma limpa, simples e eficiente de resolver isso enquanto a v. 1.6 não vem?

brunolellis commented 6 years ago

@cuducos, o que você acha dessa implementação? https://github.com/okfn-brasil/diario-oficial/compare/master...brunolellis:fix/15-scrapy-media-ext?expand=1

Basicamente, é a solução proposta no PR que você citou.

obrigado!

cuducos commented 6 years ago

Parece interessante : )

Lucas-Armand commented 6 years ago

Olá Pessoal, Meu nome é Lucas Armand. Gostaria de contribuir no projeto da implementação para a Cidade do Rio de Janeiro.

cuducos commented 6 years ago

@Lucas-Armand, o crawler já está feito (como mostra o CITIES.md), mas vc pode tocar o parser se quiser ; )

Lucas-Armand commented 6 years ago

Ok, me proponho, então, a fazer o Parse.