Este repositório consiste em um desafio de codificação para a função de Engenharia de Dados. Aqui você encontrará uma solução que faz a raspagem dos dados de artigos de um site de notícias, limpa a resposta, armazena no BigQuery
e os disponibiliza para pesquisa por meio de uma API
.
-
O crawler foi desenvolvido com
Python
utilizando as bibliotecasrequests
eparsel
, enquanto para integração com o BigQuery, foram utilizadas as bibliotecasgoogle-cloud-bigquery
egoogle-auth
. -
A
API
foi escrita emNode.js
comExpress
e@google-cloud/bigquery
para a parte de integração com o BigQuery.
O objetivo de desenvolver a API em outra linguagem e não em python (assim como o crawler), foi para demonstrar habilidades técnicas, já que este projeto foi desenvolvido para uma oportunidade de Engenharia de Dados, e
Node.js
representava um diferencial nos requisitos da vaga.
Na proxíma seção, você encontrará um passo-a-passo de como testar o projeto, porém, antes, é necessário realizar a seguinte preparação:
- Para que tudo funcione corretamente, é necessário ter uma Conta de Serviço do
Google Cloud
com as permissões necessárias para leitura e escrita de dados em projeto doBigQuery
. - Tendo a Conta de Serviço, você pode criar uma chave de autenticação, que é um arquivo
.json
, no seguinte formato:
{
"type": "service_account",
"project_id": "PROJECT_ID",
"private_key_id": "KEY_ID",
"private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
"client_email": "SERVICE_ACCOUNT_EMAIL",
"client_id": "CLIENT_ID",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}
- Assim que fizer o download da sua chave de autenticação com as permissões necessárias, você deve renomea-lá para
sa_gbq_crawler_credentials.json
(esse, é o nome de arquivo que o crawler espera encontrar quando tentar localizar as credenciais). - Por fim, insira sua chave de autenticação dentro da pasta
/crawler/src/credentials
(é nessa pasta que o crawler espera encontrar as credenciais).
⚠️ Para prosseguir, é necessário ter concluído as etapas da seção Credenciais.
Estas instruções fornecerão a você uma cópia completa do projeto instalado e funcionando em sua máquina local, para fins de testes e desenvolvimento.
- Clone o repositório:
git clone git@github.com:marcelo-mls/crawler-news.git
- Entre na pasta do repositório que você acabou de clonar:
cd crawler-news
- Acesse a pasta do
crawler
, instale as dependências e execute o projeto:
cd crawler
pip install -r requirements.txt
🚀 Agora basta executar o arquivo main.py
! 🚀
- Acesse a pasta da
API
, instale as dependências e ligue o servidor:
cd ../api
npm install
npm run dev
- Acesse o link abaixo em seu navegador para testar a
API
da ferramenta:
O servidor com a
API
irá rodar na porta 3001.
127.0.0.1:3001/articles?keywords=
Você pode testar a API com softwares como Insomnia
, Postman
ou Thunder Client
.
- GET:
'/articles?keywords='
Este endpoint retorna todas as notícias encontradas que possuem a palavra-chave especificada na url.
A busca pela palavra-chave é feita no título, no subtítulo e no conteúdo das notícias.
Para pesquisar por um termo específico, basta inseri-lo no final da url. Neste link de exemplo, a palavara-chave pesquisada foi China:
/articles?keywords=china
-
Página da BBC no momento em que o crawler foi executado
-
Resultado da API ao buscar pela notícia que estava em destaque na página da BBC
Desenvolvido por Marcelo Marques, © 2023.
Teste técnico referente à vaga de Engenheiro de Dados Pleno na Lima Consulting Group.