Giter VIP home page Giter VIP logo

ericbrasiln / pyhdb Goto Github PK

View Code? Open in Web Editor NEW
6.0 1.0 8.0 1.52 MB

pyHDB - Ferramenta de auxílio metodológico para pesquisas na interface da Hemeroteca Digital Brasileira da Biblioteca Nacional. Desenvolvida por Eric Brasil (IHLM-UNILAB) como parte de pesquisa acadêmica da área de História Digital.

Home Page: https://ericbrasiln.github.io/pyHDB/

License: MIT License

Python 99.17% CSS 0.83%
digital-history selenium-python web-scraping newspapers python python3

pyhdb's Introduction

title author date
Documentação
Eric Brasil
2022-08-26

Bem-vindo à documentação da pyHDB - Ferramenta heurística para a Hemeroteca Digital Brasileira

Banner da pyHDB

License: MIT made-with-python DOI

Acesse o site de documentação da pyHDB aqui

Ferramenta de auxílio metodológico para pesquisa na Hemeroteca Digital Brasileira da Biblioteca Nacional.

Desenvolvida por Eric Brasil como parte de pesquisa acadêmica da área de História Digital.

Essa ferramenta não possui fins lucrativos nem pretende acessar dados sigilosos ou alterar informações nos servidores da instituição.

Tem como objetivo auxiliar pesquisadores e pesquisadoras no processo de documentação e registro preciso das etapas de pesquisa e garantir o rigor metodológico. Portanto, é uma ferramenta heurística digital.

Seu desenvolvimento está no âmbito das pesquisas realizadas no curso de História do IHLM/Unilab e do LABHDUFBA.

Os resultados da pesquisa estão publicados em artigo científico avaliado por pares na Revista História da Historiografia e pode ser acessado aqui1 e seu código e documentação estão disponíveis publicamente, com licença MIT.

Buscamos não sobrecarregar os servidores da Biblioteca Nacional e respeitar os termos de uso.

Instalação

Python

Essa ferramenta foi escrita em Python 3.9. Esta é uma linguagem de programação que te permite trabalhar rapidamente e integrar diferentes sistemas com maior eficiência.

Para executar o arquivo .py é preciso instalar o Python3 em seu computador, assim como as bibliotecas utilizadas na ferramentas.

Clique aqui para um tutorial de instalação do Python no Windows, clique aqui para Linux e clique aqui para Mac.

Após a instalação, vc pode executar arquivos .py direto do prompt de comando do Windows ou pelo terminal do Linux, ou utilizar as diversas IDE disponíveis.

Para saber mais sobre a instalação e configuração do Python em vários sistemas operacionais, veja a lição Introdução e instalação do Python de William J. Turkel e Adam Crymble 2.

Além do Python, seu computador precisa ter o pip instalado, um programa para instalar pacotes de software. Nas versões mais recentes do Python, o pip já vem instalado. Para saber mais, veja a lição Instalação de Módulos Python com pip, de Fred Gibbs 3.

Bibliotecas e módulos

  • urllib.requests: módulo do Python que lida com urls. Saiba mais.
  • Selenium: o Selenium é um conjunto de ferramentas para automatização de utilização de navegadores.
  • webdriver.manager: biblioteca que auxilia na instalação e configuração dos drivers de navegadores. Saiba mais
  • pandas: Pandas é uma biblioteca escrita em Python para manipulação e análise de dados.
  • wget: Wget é um programa de linha de comando para baixar arquivos de um servidor remoto.

OBS 1: A ferramenta foi desenvolvida e testada no sistema operacional Linux, em distribuição baseada no Ubuntu 20.10. Entretanto, ela foi projetada para funcionar em qualquer sistema operacional que suporte o Python 3.9.

OBS 2: A ferramenta utiliza padrões ANSI para imprimir na tela alguns textos coloridos. Esse padrão é suportado nos terminais Linux e neles foram testados. Para usuários Windows é importante destacar que o suporte às ANSI scape colors existe no PowerShell a partir da versão 7.2, conforme essa resposta no StackOverflow. Portanto, para que os detalhes coloridos da ferramenta sejam impressos corretamente na tela, usuários de Windows devem utilizar PowerShell 7.2 ou mais recentes ou outros emuladores de terminal que suportem cores ANSI. Para mais informações ver a página oficial do PowerShell e a página da Wikipédia sobre xterm, emulador de terminal para Windows.

OBS 3: É necessário possuir o navegador Chrome instalado, pois este será utilizado pelo Selenium para acessar o site da HDB.

Download da ferramenta pyHDB

Para baixar a ferramenta para seu computador, existem duas formas. Para ambos os casos, é necessário acessar o repositório do GitHub ericbrasiln/pyHDB e clicar no botão Code.

Botão

Baixar o arquivo compactado pyHDB.zip

Para baixar o arquivo pyHDB.zip, após clicar em Code, clique em Download ZIP e salve em seu computador.

Download ZIP

Em seguida, descompacte o arquivo no local de sua preferência.

Clonar o repositório com Git ou criar um fork no GitHub

Para quem utiliza o sistema de controle de versões Git, basta clonar o repositório para seu computador, executando os comandos a partir da pasta em que deseja salvar o repositório.

git clone https://github.com/ericbrasiln/pyHDB.git

Quem utiliza o GitHub, pode também criar um fork do repositório.

Instalando requisitos

Após baixar ou clonar o repositório para seu computador, acesse a pasta através do terminal ou PowerShell, caso seja usuário Windows.

cd <caminho para pasta>/pyHDB/src

Para saber mais sobre os comandos básicos do PowerShell, veja a lição Introduction to the Windows Command Line with PowerShell, de Ted Dawson no The Programming Historian 4. Para o Terminal para Linux e MacOS, veja a lição Introduction to the Bash Command Line, de Ian Milligan and James Baker no The Programming Historian 5.

É necessário instalar os requisitos (módulos e bibliotecas). Para isso, execute o comando abaixo:

$ pip3 install -r requirements.txt

Após a conclusão do processo, a ferramenta estará pronta para ser utilizada.

Usos

Para iniciar a ferramenta, é preciso executar o arquivo pyHDB.py usando Python3, a partir da pasta pyHDB/src. Para isso, execute o comando abaixo, no terminal ou PowerShell, estando na pasta pyHDB/src.

$ python3 pyHDB.py

Ao executar o programa, o usuário verá as informações introdutórias da ferramentas, como na imagem abaixo:

intro pyHDB

Em seguida, o usuário deverá inserir os parâmetros de busca. Lembrando que nessa versão do programa, a busca inicial é estabelecida pela opção local.

1- Local
Orientações para busca:
      - O termo deve ser idêntico às opções listadas na página da HDB;
      - Esse parâmetro é case sensitive;
Digite o local de busca: 

É possível incluir uma opção de recorte temporal em seguida.


2 - Período
Orientações para busca:
      - O recorte deve ser escrito de forma idêntica às opções listadas na página da HDB;
      - É possível buscar todos os periódicos digitando `Todos`
Digite o período de busca: 

OBS 4: Lembrando que os parâmetros Local e Período devem ser escritos de forma idêntica às opções listadas na página da HDB. Por Exemplo, se o usuários deseja buscar os periódicos existentes no Rio de Janeiro, deve colocar RJ. Se o usuário deseja buscar os periódicos existentes no Rio de Janeiro na década de 1910, deve colocar 1910 - 1919, pois as opções de período existentes na HDB estão organizadas por décadas.

A busca será efetuada em todos os acervos existentes para essa configuração (3 - Periódico: Todos), após a inclusão do termo da busca.

4 - Termo da busca
Orientações para busca:
      - Coloque o termo entre aspas duplas para expressões exatas;
      - Não use acentos ou caracteres especiais;
      - É recomendado não utilizar mais do que três palavras.
Digite o termo de busca:

Portanto, a busca foi elaborada a partir das demandas de pesquisa e interesses pessoais e serão explicadas detalhadamente em artigo.

A partir dos parâmetros de busca definidos pelo usuário, o programa retorna todos os acervos dos jornais com alguma ocorrência, até o limite de 100 jornais (ou seja, a segunda página de resultados).

Opção de busca por acervo ou lista de acervos específicos

A ferramenta pyHDB permite a busca por acervos específicos, ou lista de acervos específicos. Para tanto é preciso executar o arquivo pyHDB_acervos.py.

O usuário deverá informar o número do acervo ou a lista de acervos que deseja pesquisar.

Essa opção foi desenvolvida para sanar erros no processo de raspagem que podem acontecer principalmente em buscas com milhares de ocorrências.

Se algum acervo não for raspado corretamente pela ferramenta principal pyHDB, o usuário poderá executar o arquivo pyHDB_acervos.py para raspagem de acervos específicos.

Ao final do processo, a ferramenta criará arquivos csv e relatórios em txt no mesmo padrão da ferramenta principal pyHDB. Além disso, retornará automaticamente um csv final mesclando os dados recém coletados com os dados já existentes (desde que a busca seja executada na mesma data).

Resultados

O programa retorna os seguintes resultados:

  1. Cria diretórios de armazenamento: HDB/{termo da busca}/{data da busca}/

  2. CSV: Cria um diretório HDB/{termo da busca}/{data da busca}/CSV e, dentro dele, salva arquivo csv contendo os seguintes dados para cada ocorrência: Termo da busca, Data da Busca, Acervo, Ano, Edição, Página, Nome do arquivo, Link.

  3. RELATÓRIOS: Cria um diretório HDB/{termo da busca}/{data da busca}/RELATÓRIOS e salva nele relatórios de busca para cada pesquisa.

    • GERAL: Com os dados gerais da pesquisa
      - Data e hora da busca
      - Local da busca
      - Período da busca
      - Periódico da busca: 
      - Termo da busca
      - Lista de acervos com ocorrências (máx. de 100) e quantidade de ocorrências
      - Total de acervos com ocorrências (máx. de 100)
      - Informações adicionais: Total de páginas pesquisadas; Total de acervos pesquisados; Total de ocorrências e Frequência de ocorrências por página.
      
      O título do arquivo tem o seguinte padrão: GERAL_{termo da pesquisa}_{data e hora da busca}.txt
    • Acervo: Com os dados de cada acervo
      - Data e hora da busca
      - Termo da busca
      - Acervo
      - Total de ocorrências
      - Link da lista de resultados
      
      O título do arquivo tem o seguinte padrão: relatório_{nome do acervo}_{número do acervo}_{data e hora da busca}.txt
    • ERRO: registra acervos que não puderam ser raspados
      - Data e hora da busca
      - Termo da busca
      - Acervo com ocorrência que não pode ser acessado
      
      O título do arquivo tem o seguinte padrão: ERRO_{número do acervo}_{data e hora da busca}.txt
    • INFORMAÇÕES GERAIS: registra dados gerais relativo ao quantitativo de acervos e páginas pesquisadas na busca e a quantidade de ocorrências, assim como a frequência de ocorrências por página.
      • Acervo
      • Total de Páginas
      • Total de Ocorrências
      • Frequência de ocorrências X páginas. O título do arquivo tem o seguinte padrão: {infos_acervos}_{período}_{page01 ou 02}.csv
  4. ARQUIVOS_IMG: Cria um diretório HDB/{termo da busca}/{data da busca}/ARQUIVOS_IMGe salva as imagens das páginas com ocorrências. O nome do arquivo é a combinação no número do acervo com o número geral da página. Ex: 168319_02_12603.jpg

Estrutura de diretórios

HDB
├── {termo da busca}
│   ├── {data}
│   │   ├── CSV
│   │   ├── RELATÓRIOS
│   │   ├── ARQUIVOS_IMG

Relatar erros e sugestões

Sendo a ferramenta pyHDB um scraper, um raspador de dados da internet, ela está profundamente ligada e dependente da estrutura e funcionamento do site da Hemeroteca Digital Brasileira da Biblioteca Nacional. Instabilidades no funcionamento do site da HDB afetam e prejudicam a raspagem de dados. Assim como, alterações na estrutura do site da HDB podem inviabilizar o funcionamento da ferramenta.

Portanto, erros de execução, de resultados, entre outros podem acontecer a qualquer momento. Para que a ferramenta possa continuar funcionando corretamente, o usuário deverá relatar os erros e enviar sugestões para a equipe de desenvolvimento da ferramenta.

Sugerimos que o usuário crie issues no GitHub da ferramenta pyHDB explicando da forma mais detalhada possível os problemas e qual sistema operacional está utilizando.

Como citar?

É possível clicar em Cite this repository na aba à direita da página inicial do repositório no GitHub para acessar a citação nos formatos APA e BibTex, ou ainda acessar o arquivo da citação em formato .cff.

Abaixo a citação no formato BibTex:

@software{Eric_pyhdb2021,
  author = {Eric Brasil},
  doi = {10.5281/zenodo.5696671}
  title = {pyHDB - Ferramenta heurística para a Hemeroteca Digital Brasileira},
  url = {https://github.com/ericbrasiln/pyHDB}
  version = {1.6.1}
  year = {2021},
  note = {Online; accessed 14 January 2023}
}

Agradecimentos

Agradeço ao LABHDUFBA pela parceria e possibilidades de aprendizado e desenvolvimento de ferramentas e reflexões para a pesquisa em história e humanidades digitais.

A pyHDB não seria possível sem a participação ativa de Leonardo F. Nascimento (a quem devo o agradecimento pela sugestão do nome da ferramenta) e Gabriel Andrade.


Licença

MIT LICENSE

Copyright (c) 2021 Eric Brasil

Footnotes

  1. BRASIL, Eric. pyHDB - Ferramenta Heurística para a Hemeroteca Digital Brasileira: utilizando técnicas de web scraping para a pesquisa em História. História da Historiografia: International Journal of Theory and History of Historiography, Ouro Preto, v. 15, n. 40, p. 186–217, 2022. DOI: 10.15848/hh.v15i40.1904.

  2. William J. Turkel e Adam Crymble, "Introdução e instalação do Python", traduzido por Josir C. Gomes, Programming Historian em português 1 (2021), https://doi.org/10.46430/phpt0004.

  3. Fred Gibbs, "Instalação de Módulos Python com pip", traduzido por Felipe Lamarca, Programming Historian em português 1 (2021), https://doi.org/10.46430/phpt0018.

  4. Ted Dawson, "Introduction to the Windows Command Line with PowerShell," Programming Historian 5 (2016), https://doi.org/10.46430/phen0054.

  5. Ian Milligan and James Baker, "Introduction to the Bash Command Line," Programming Historian 3 (2014), https://doi.org/10.46430/phen0037.

pyhdb's People

Contributors

ericbrasiln avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

pyhdb's Issues

Não consigo executar

Oi Eric! Help!

Não estou conseguindo executar a raspagem. Estou principalmente com 2 problemas:

  1. Na instalação do urllib.requests aparecem os sguintes erros:
    ERROR: Could not find a version that satisfies the requirement urllib.requests (from versions: none)
    ERROR: No matching distribution found for urllib.requests

  2. Depois de instalar as outras bibliotecas, baixar o script, clonar o repositório, qunado vou instalar os requisitos e colocar o local onde armazenei, aparece o erro:
    O sistema não pode encontrar o arquivo especificado.
    Sem título


Não sei se estou errando no meio do caminho, mas tô há horas quebrando a cabeça e não vai.. Se vc tiver alguma dica para me dar, agradeço imenso!!

Cores no terminal: compatibilidade com Windows

Descrição do problema

A sintáxe para mostrar cores no terminal de sistemas Linux não funciona no Windows. Então, o resultado é a impressão da tela dos códigos das cores.

TODO

  • Definir método para utilizar cores que seja multi plataforma (de preferência com módulo ou biblioteca interna do Python).
  • Testar e corrigir
  • Documentar
  • Fazer PR e fazer novo release com a tag v1.5.1 (junto com #8 )

[BUG]

Descreva o bug
O programa roda, porém, o script sempre encontra 0 ocorrências, mesmo elas existindo na Hemeroteca.

Reproduzir
Foi seguido exatamente o passo a passo solicitado. Foi feita a tentativa no Windows e no Linux, em diferentes computadores, sem sucesso.

Comportamento esperado
Era para aparecer as ocorrências na pasta, conforme a documentação. Ele sequer encontra ocorrências.

Screenshots
image

Desktop (por favor, preencha as seguintes informações):

  • SO: Linux Mint, Windows 10 e Windows 11
  • Versão do Python: 3.11
  • Terminal ou terminal virtual: CMD, PowerShell e Terminal (Linux Mint)

Não consigo executar!

Querido, Eric! Primeira aventura no manuseio do Python e outros comandos.

Fiz todos os passos descritos no manual do pyHDB porém não tenho êxito no momento de inicializá-lo.

  1. No Powershell:
    image

  2. Ao clicar duas vezes na pasta, abre rapidamente e logo depois fecha:
    Sem título

Sem título 1

Apesar do ícone do Opera aberto, tenho o Chrome instalado.

Muito obrigado pela dedicação ao software, abrindo essas portas!

Ansioso para utilizá-lo sem problemas.

Abraço!

TODO

Algumas melhorias ainda precisam ser feitas.

  • Incluir na documentação informações sobre o artigo publicado: BRASIL, Eric. pyHDB - Ferramenta Heurística para a Hemeroteca Digital Brasileira: utilizando técnicas de web scraping para a pesquisa em História. História da Historiografia: International Journal of Theory and History of Historiography, Ouro Preto, v. 15, n. 40, p. 186–217, 2022. DOI: 10.15848/hh.v15i40.1904. Disponível em: https://www.historiadahistoriografia.com.br/revista/article/view/1904. Acesso em: 6 jan. 2023.
  • Cores no terminal para Windows (ver #10 ): incluir informações na documentação
  • Alterar a nomeação da 'frequência de ocorrências por página'. Na verdade, se trata de quantidades de páginas necessárias para o apareceimento de uma ocorrência.
  • Nomeção do relatório infos_acervos_{{período}}_page01:
    • Não leva em consideração diferentes locais com mesmo período e termo de busca. Com isso, salva por cima de relatório anterior.
    • Remover espaços no período. Exemplo: 1880 - 1889 para 1880-1889
  • Nomeação dos relaórios de acervos relatório_{{nome-do-acervo}}_{{número-do-acervo}}_{{AAAA-MM-DD}}_{{HH-MM-SS}}:
    • Remover espaços no nome do acervo
    • Remover caracteres especiais
  • Corrigir Bug na busca: headless não carrega a página corretamente (ver issue #17 e #18 )
  • Aviso de jornal com restições: padronizar texto.

Problema no parâmetro "termo da busca": termos sem o uso de `"` como delimitador retorna erro

Descrição do erro

Ao buscar termos sem a utilização de aspas duplas para definir expressões exatas, o programa está retornando o seguinte erro:

Traceback (most recent call last):
  File "/home/ebn/Documentos/test_pyHDB/pyHDB/src/pyHDB.py", line 115, in <module>
    set_journal(driver, journal)
  File "/home/ebn/Documentos/test_pyHDB/pyHDB/src/parameters.py", line 51, in set_journal
    p_arrow = WebDriverWait(driver, 40).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="PeriodicoCmb3_Arrow"]'))).click()
  File "/home/ebn/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webelement.py", line 81, in click
    self._execute(Command.CLICK_ELEMENT)
  File "/home/ebn/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webelement.py", line 740, in _execute
    return self._parent.execute(command, params)
  File "/home/ebn/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 430, in execute
    self.error_handler.check_response(response)
  File "/home/ebn/.local/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <span id="PeriodicoCmb3_Arrow" class="p-icon p-i-arrow-60-down"></span> is not clickable at point (773, 162). Other element would receive the click: <div class="raDiv">...</div>
  (Session info: headless chrome=102.0.5005.115)
Stacktrace:
#0 0x558340f63f33 <unknown>
#1 0x558340cae118 <unknown>
#2 0x558340ceba42 <unknown>
#3 0x558340ce95f2 <unknown>
#4 0x558340ce6c74 <unknown>
#5 0x558340ce58c5 <unknown>
#6 0x558340cd95b9 <unknown>
#7 0x558340d01f72 <unknown>
#8 0x558340cd8e73 <unknown>
#9 0x558340d0207e <unknown>
#10 0x558340d152e4 <unknown>
#11 0x558340d01e63 <unknown>
#12 0x558340cd782a <unknown>
#13 0x558340cd8985 <unknown>
#14 0x558340fa84cd <unknown>
#15 0x558340fac5ec <unknown>
#16 0x558340f9271e <unknown>
#17 0x558340fad238 <unknown>
#18 0x558340f87870 <unknown>
#19 0x558340fc9608 <unknown>
#20 0x558340fc9788 <unknown>
#21 0x558340fe3f1d <unknown>
#22 0x7f6d4df3db43 <unknown>

Quando a busca é realizada por expressões exatas (com " como delimitador) a ferramenta funciona corretamente até para mais de três termos.

TODO

  • Realizar debug e encontrar o erro
  • Corrigir e testar
  • Documentar
  • Incluir recomendações de uso na documentação
  • Fazer PR e fazer novo release com a tag v1.5.1

[BUG]

Descreva o bug
Aparentemente a versão do ChromeDriver utilizado não condiz com a versão do Google Chrome atual. Mesmo atualizando o ChromeDriver, o programa indica este erro.

Reproduzir
O comportamento é visto quando executo o código via terminal com:
python3 pyHBD.py

Comportamento esperado
O programa deveria continuar executando, me dando as opções que nele existem.

Screenshots
image

Desktop (por favor, preencha as seguintes informações):

  • SO: Linux Mint 21.2
  • Versão do Python: 3.10.12
  • Terminal ou terminal virtual: Terminal do Linux Mint 21.2

Informações adicionais:
Testei o pyHDB_acervos.py e ocorre o mesmo erro.
Baixei e testei o ChromeDriver mais atualizado e o erro segue.
Acredito que seja algum problema com a versão utilizada no código mesmo.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.