Executando verificação de segurança...
2

Conhecendo o Ecossistema de Ferramentas de Web Scraping do JavaScript

O ecossistema de ferramentas de Web Scraping em JavaScript ou Typescript, embora seja um pouco subestimado e obfuscado pela popularidade das ferramentas do Python, é muito interessante.

Requisições HTTP

Para fazer requisições HTTP em Node.js, você tem várias opções, desde utilizar APIs nativas como Fetch API ou as bibliotecas HTTP e HTTPS. Se você precisa de algo mais simples, pode usar o Axios ou Got.

Caso necessite de algo mais furtivo que não é resolvido com uma simples alteração no cabeçalho da requisção de User-Agent por exemplo, e buscando eviar bloqueios que utilizam de heuristicas mais roubustas, como fingerprinting, você pode combinar essa biblioteca com o header-generator ou usar uma bibliteca que já faz isso, como por exemplo a Got Scraping e a Impit.

Supondo que você queira fazer web scraping em um site que usa JavaScript para renderizar o conteúdo ou que necessita de interação na página então carregar o conteúdo desejado, você vai ter de estudar coisas como Puppeteer ou Playwright, que são bibliotecas equivalente ao Selenium que temos no Python e em outras linguagens de programação.

Mas, talvez você caiu no mesmo problema de antes: o bloqueio por ser detectado como automação. A boa notícia é que existem ferramentas também para que você consiga deixar seu navegador furtivo. Conheça o Puppeteer Extra! Essa é uma biblioteca com um ecossitema que comtempla mais de 100 plugins; suporte a coisas como furtividade, integração com serviços de resolução de captcha, bloqueio de anúncios e bloqueio de recuros como imagens, vídeos, estilos css, etc. Conheca os principais plugins:

Stealth Plugin

URL: https://www.npmjs.com/package/puppeteer-extra-plugin-stealth

O plugin Stealth é uma biblioteca para evasão, pode evitar a detecção de muitos sistemas antibot, em alguns casos, até evitar que o Cloudflare exiba desafios.

AdBlocker

URL: https://www.npmjs.com/package/puppeteer-extra-plugin-adblocker

O plugin AdBlocker é uma biblioteca para bloquear os anúncios, deixando seu web scraping mais leve, evitando ficar fazendo o downlod de lixo de anúncios.

Block Resources

URL: https://www.npmjs.com/package/puppeteer-extra-plugin-block-resources

O plugin Block Resources é como o AdBlocker, só que um passo além, recomendado se você não precisa de mídia nem estilizações da página para realizar as operações pretendidas.

Amazon Captcha Solver

URL: https://www.npmjs.com/package/@mihnea.dev/puppeteer-extra-amazon-captcha

O plugin Amazon Captcha Solver serve para resolver captchas da amazon usando OCR, recomendo usar em conjunto com o plugin Stealth, para parecer mais um usuário real.
E, para fechar com chave de ouro esse tópico, para você que preicisa ir um passo além na furtividade e evasão, conhecça o Puppeteer Real Browser que é uma biblioteca que, infelizmente não será mais mantida por muito tempo, mas que, até o momento funciona muito bem; e é compatível com os plugins do Puppeteer Extra. Eu, juntando ela com o Nut Tree, consegui vencer o Cloudflare Turnstile.

Parsing de HTML, JSON e Markdown

Uma etapa tão importante quanto não ser bloqueado é ler o conteúdo e extrair os dados dele de uma forma lógica para que possamos transformá-lo posteriormente.

Fazendo parsing de HTML

Na maioria dos casos estamos lidando com HTML em web scraping, para isso, temos algumas soluções, algumas mais próximas da API do navegador, outras próximas ao jQuery e outras que fazem do seu próprio jeito. Minha preferida é a Node HTML Parser; ela é uma das bibliotecmas mais rápidas do Node.js e, tem uma API muito próxima ao que temos no navegador, ou seja, temos querySelector e querySelectorAll e a maioria dos atributos que você espera que um elemento tenha. Para àqueles que preferem algo que se pareça com o jQuery, temos o Cheerio. Se você é um dev que é fissurado em coisas escritas em Rust, talvez queira conhecer a biblioteca que eu fiz, atualmente a mais rápida em tempo de inicialização de instância, a Xcrap HTML Parser e suporta tanto CSS quanto XPath.

Fazendo Parsing de JSON

Talvez você esteja confuso com isso, eu sei, parece que seria mais coveniente apenas simplesmente acessar as propriedades do JSON diretamente, mas, conheça o JMESPath! Ela é uma linguagem de query para JSON, que permite que você use condicionais para extrair informações no seu JSON e muito mais.

Fazendo Parsing de Markdown

Eu não sei em que droga de lugar você está fazendo scraping e tem algum arquivo de markdown para acessar, mas, de toda forma; o que você precisa é do Markdown It, e talvez alguns de seus plugin, como o Markdown It Anchor. Recomendo usar ele e transformar o markdown em HTML e usar algo como o Node HTML Parser para então estrair o conteúdo.

Extrair dados de HTML, JSON e Markdown juntos?

E se fosse possível extrair dados de um documento HTML que também tivesse JSON e Markdown juntos, teria como sem fazer regex e queries malucas? A resposta é sim, principalmente se você optar por usar o Xcrap Extractor. É uma biblioteca que funciona de forma declarativa e tem suporte nativo à essas 3 linguagens, suportando uma estrutura alinhada; você vai ter uma saída mais ou menos estrurada, quase pronto para uso.

Validação e Tansformação de Dados

Depois de ter passado por todas arquelas etapas, você quer ter dados limpos, prontos para o uso; recomendo usar o Zod, tanto para validar, quanto para transformar estes dados. Ele é fexível o suficiente para que você possa fazer da forma como quiser.

Carregando publicação patrocinada...
1
1

Ele funciona para alguns sites que tem uma proteção mais fraca ou antiga. Não cheguei a estudar como essas novas heuristicas de detecção funcionam, mas, percebi que o Cloudflare Turnstile consegue detectar ele, enquanto não consegue detectar o Puppeteer Real Browser (não estando mo modo headless)...