Crawler e Seus Desafios

Meu desafio de crawler para uma vaga

Participei de um processo seletivo e levei 2 dias para desenvolver uma API.

Nunca tinha desenvolvido um web crawler, apenas web scraping. Por mais que sejam parecidos, não são iguais.

Antes de começar a desenvolver, fiz uma entrevista. Ele me passou os detalhes do que esperava que eu desenvolvesse e que o crawler não podia usar o navegador devido à questão de desempenho. Então, fui desenvolver.

Depois de algumas horas, finalizei e enviei o link do projeto, que foi repassado para um desenvolvedor. Porém, não era exatamente o que eles esperavam, embora fosse o que o entrevistador havia solicitado. O desenvolvedor me disse que não era para usar navegador, mesmo eu tendo feito sem, utilizando apenas Axios e Cheerio.

Fiquei um pouco perdido, pois nunca tinha utilizado Cheerio antes, então fiquei na duvida se eu tinha pesquisado corretamente antes de começar (Eu tinha pesquisado bastante, o que me levou a escolher essa abordagem nesse processo)

Com esse problema, o entrevistador criou um grupo comigo, o desenvolvedor e outras pessoas que também tiveram a mesma dúvida, pois os detalhes não foram passados corretamente. Nessa confusão, percebi que houve um equívoco ao afirmarem que eu estava utilizando um navegador.

Mesmo começando com essa bagunça, aprendi bastante nesse processo. Percebi que ser um desenvolvedor vai além de simplesmente saber usar uma ferramenta; trata-se de encontrar as melhores soluções e resolver os desafios que surgem.

E depois com novas tarefas o que mais me desafiou nesse projeto foi implementar a paginação de uma parte do site. Era um tipo de paginação que eu nunca tinha visto antes. Ao analisar como funcionava, tentei fazer uma engenharia reversa, mas não tive sucesso. Por exemplo, abri o DevTools do navegador para entender o processo. Notei que, ao solicitar a próxima página, o site enviava uma requisição para o backend com um payload url encoded e retornava um XML que inicialmente não fazia sentido para mim, pois não encontrei os dados das páginas nele. No entanto, os dados da página eram corretamente renderizados na interface. Decidi então focar nas outras partes do projeto e deixei essa paginação de lado, perdendo metade do tempo de desenvolvimento da API tentando resolver esse problema.

Vou deixar o link da API caso queiram dar uma olhada, melhorar ou até mesmo resolver esse desafio. Mesmo não sendo aprovado, vou continuar tentando entender e resolver esse problema!

Link: https://github.com/ewerton11/crawlers_test.git

Oi Ewerton, tudo bem?

Primeiro, parabéns pela insistência, acho que é uma coisa bem legal da sua parte em tentar resolver mesmo estando fora da sua zona de conforto.

Eu trabalhei durante anos em uma legaltech, e liderei a equipe de coleta de dados dos tribunais. Certamente não é a que você se aplicou, pois utilizávamos Python haha

Acredito que você estava no caminho certo. Não vou me lembrar com exatidão dos detalhes pois saí de lá recentemente e operavamos quase 150 crawlers como este, mas acredito que no XML que você recebia como resposta da paginação havia como conteúdo em uma atributo específico o código parcial da página, que ainda é HTML, mas só o suficiente para alterar o conteúdo da tabela na página. Então o negócio seria fazer o parsing do XML, encontrar uma chave específica e realizar parsing do conteúdo dela como HTML. É um esquema razoavelmente comum nos tribunais de justiça cíveis (que foi o seu caso).

Se eu conseguir um tempinho, depois tento abrir um PR pra vc (não manjo de TS, então vai ser divertido haha)

Opa, boa tarde! Acho que é isso mesmo que você falou. Por eu não estar familiarizado e ter passado algumas horas tentando resolver sem sucesso, acho que perdi um pouco da paciência e não fiz o simples, como pedir para o ChatGPT analisar a resposta, entender realmente a resposta do servidor e fazer o script com mais calma. Obrigado pelas dicas e sinta-se à vontade para mexer no código. Eu também vou tentar resolver isso ainda hoje!

Muito boa postagem, exemplificou bem alguns dos problemas dessa área. Sinto falta de discussões como essa sobre o assunto aqui no TabNews. Parece que a maioria dos conteúdos é direcionado à área de desenvolvimento web. Falando nisso, alguém teria uma indicação de lugar de divulgação/debate de assuntos relativos a esse tema?

Eu também sou dos que prefere utilizar Python. Inclusive há um crawler muito bom que já utilizei para projetos pessoais, o Scrapy. É uma ferramenta bem robusta.

Utilizei o Scrapy também, gostei bastante. Simplifica muito lidar com questões chatas que ocorrem quando utilizamos o `requests` ou `httpx`. Eu acredito que há certa escassez de fóruns dedicados ao assunto mesmo, o material é bem espalhado pela web. Tem um [livro](https://www.amazon.com.br/Web-Scraping-Com-Python-Coletando/dp/8575227300) que estava na minha lista de compras durante um tempo, mas não cheguei a comprar pra dizer se é bom. Parece ser, pelo que li dele.
Vlw, cara! Sempre é bom fazer postagens fora do que é previsível. Um lugar que te recomendo para debates sobre tecnologia é o Reddit. Não uso muito, mas pelo pouco que usei, vi que é interessante pra debater.

É sempre assim, você pede detalhes e dizem que "qualquer coisa" serve, é apenas para ver se você faz um "crawler" ou qualquer outro tipo de software. Depois te recusam porque você não usou a tecnologia X ou Y, não usou o padrão X ou Y, etc. Sendo que somos perfeitamente capazes de usar praticamente qualquer coisa, mas insistem que temos que ter o poder da "advinhação", ou uma hora eles irão encontrar o candidado que magicamente irá bater com os requisitos que eles buscam, mas devido a grande diversidade de tecnologias é necessário investir no candidado ou funcionário, fazer Bootcamps, etc.

Tú fez usando js ??? Nuss, eu faria isso usando python com requests ou httpx. Vou pegar esse desafio e tentar resolver usando python, farei menção a ti quando tiver terminado.

Sim, fiz com TypeScript, que era parte do ecossistema da vaga. Já vi muitas pessoas dizendo que Python é melhor, mas como não tenho experiência com ele, nunca testei. Porém, faça aí que estou curioso para ver como vai ficar.