Ir para o conteúdo

Ignorando blocos de web scraping com Node-Unblocker

Olá!

Então você construiu um web scraper incrível com Node.js, mas os sites continuam bloqueando suas solicitações? Todos nós já estivemos lá!

Neste guia abrangente de mais de 3000 palavras, você aprenderá como aproveitar o Node-Unblocker para evitar bloqueios e raspar qualquer site.

O que é o Node-Unblocker e por que usá-lo?

Node-Unblocker é um módulo Node.js de código aberto que permite executar um servidor proxy com middlewares personalizados para modificar solicitações e respostas.

Aqui estão alguns dos principais motivos pelos quais o Node-Unblocker é tão útil para web scraping:

  • Evite bloqueios de IP – Ao rotear seu scraper por meio de proxies, você pode evitar o banimento do IP devido a muitas solicitações de um endereço IP. Isto é fundamental para uma raspagem bem-sucedida em grande escala.

  • Ignorar blocos geográficos – Muitos sites restringem o acesso ao conteúdo com base na localização. Com o Node-Unblocker, você pode fazer proxy através de IPs em regiões específicas para contornar esses bloqueios.

  • Raspe sites JavaScript – Node-Unblocker oferece suporte a proxy de websockets, o que permite a raspagem de sites que dependem fortemente de JavaScript. Muitos scrapers têm dificuldades com sites JS.

  • Modificar solicitações – Middlewares personalizados permitem alterar cabeçalhos de solicitação para imitar navegadores, gerenciar login automaticamente, codificar caracteres e muito mais.

  • Transformar respostas – Remodele e processe respostas usando os middlewares de resposta antes que cheguem ao código do raspador.

  • Leve e rápido – O Node-Unblocker é construído inteiramente em JavaScript, por isso é extremamente rápido e fácil de integrar ao seu raspador JS.

De acordo com pesquisas, mais de 60% dos sites agora empregam medidas anti-scraping, como bloqueio de IP, CAPTCHAs e detecção de bots. Node-Unblocker é sua arma secreta para superar esses obstáculos.

Instalando e configurando o Node-Unblocker

Vamos primeiro ver como instalar e configurar o Node-Unblocker. Também criaremos um servidor proxy de amostra para testá-lo.

Etapa 1: instalar o desbloqueador de nós

Supondo que você já tenha um projeto Node.js, instale o Node-Unblocker e o Express:

npm install node-unblocker express

Isso adicionará os dois módulos ao seu package.json.

Etapa 2: inicializar o servidor expresso

No arquivo do servidor, inicialize um aplicativo Express e uma instância do Node-Unblocker:

// server.js

const express = require(‘express‘);
const Unblocker = require(‘unblocker‘);

const app = express();
const unblocker = Unblocker(); 

// Node-Unblocker is now ready to use!

Etapa 3: adicionar rota proxy

Para solicitações de proxy, adicione uma rota que redirecione através do middleware Unblocker:

app.get(‘/scrape‘, (req, res) => {
  const url = req.query.url;

  res.redirect(`/proxy/${url}`); 
});

Agora podemos fazer solicitações para /scrape?url=http://example.com e o Node-Unblocker fará proxy deles.

Etapa 4: iniciar o servidor

Finalmente, inicie o servidor proxy:

const PORT = 3000;

app.listen(PORT, () => {
  console.log(`Proxy server running on port ${PORT}`);
});

Nosso servidor básico Node-Unblocker agora está instalado e funcionando!

A seguir, vamos ver como podemos aproveitá-lo em nossos web scrapers.

Usando Node-Unblocker para Web Scraping

Aqui estão alguns dos casos de uso mais comuns para usar o Node-Unblocker para raspar sites:

Proxies rotativos

Um dos maiores desafios do web scraping é evitar ser bloqueado pelo site de destino após fazer muitas solicitações de um IP.

O Node-Unblocker fornece uma maneira fácil de implementar uma solução de proxy rotativa.

As etapas são as seguintes:

  1. Obtenha acesso a um pool de servidores proxy – você pode usar um provedor como Luminati or oxilabs para obter centenas de IPs proxy.

  2. Adicione os proxies a uma lista – por exemplo:

const proxies = [
  ‘http://proxy1.com‘,
  ‘http://proxy2.com‘,
  // etc
];
  1. Antes de cada solicitação, selecione aleatoriamente um proxy:
function getRandomProxy() {
  return proxies[Math.floor(Math.random() * proxies.length)];
}
  1. Faça a solicitação de web scraping através do proxy:
const proxy = getRandomProxy();

request(`${proxy}/targetUrl`);

Ao alternar os proxies em cada solicitação, você pode aumentar a escala sem ser bloqueado. Dica profissional: use um pool de proxy pelo menos 10 vezes maior do que sua taxa de solicitações por segundo.

Ignorando Blocos Geográficos

Alguns sites restringem o acesso ao conteúdo com base na localização geográfica do visitante.

Por exemplo, o site http://usanews.com permite apenas tráfego de IPs dos Estados Unidos. Usando o Node-Unblocker, podemos facilmente contornar essa restrição.

As etapas são as seguintes:

  1. Obtenha IPs de proxy residencial para sua região de destino, por exemplo, EUA.

  2. Adicione esses proxies específicos da região ao Node-Unblocker.

  3. Direcione o tráfego do seu scraper através do Node-Unblocker.

Agora aparecerão todas as solicitações vindas da região desejada e acessarão o conteúdo bloqueado geograficamente com sucesso!

Essa técnica também funciona para simular o tráfego móvel de um país específico, o que é útil para coletar aplicativos móveis direcionados à região.

Raspando sites JavaScript

Os sites modernos dependem muito de JavaScript para renderizar conteúdo. Scrapers convencionais que baixam apenas HTML têm dificuldade em analisar essas páginas interativas.

Felizmente, o Node-Unblocker faz proxy de websockets por padrão, o que permite copiar sites JS:

// Enable websocket proxying
unblocker.listen().on(‘upgrade‘, unblocker.onUpgrade); 

// Make request and JS will execute
request(‘http://jsSite.com‘);  

O site carregará e executará JS de maneira semelhante a um navegador, permitindo a extração bem-sucedida de dados.

No entanto, isso só funciona bem para sites JavaScript públicos. Para renderização JS robusta, uma ferramenta como Marionetista é recomendado em vez disso.

Aplicando Middlewares de Solicitação Personalizada

Um dos recursos mais poderosos do Node-Unblocker são seus middlewares personalizados. Podemos usá-los para modificar solicitações e respostas.

Alguns exemplos de como os middlewares de solicitação podem ajudar no web scraping:

Alternar usuários-agentes

Muitos sites bloqueiam scrapers que enviam o mesmo User-Agent em cada solicitação. Podemos girá-lo automaticamente:

// Randomly choose User-Agent 
unblocker.use((req, res) => {
  const userAgents = [‘UA1‘, ‘UA2‘, ‘UA3‘];

  req.headers[‘User-Agent‘] = userAgents[Math.floor(Math.random() * userAgents.length)];
});

Agora cada solicitação terá um User-Agent diferente evitando essa tática de bloqueio.

Login automático

Para sites que exigem login, podemos anexar as credenciais de autenticação sem alterar nosso código raspador:

unblocker.use((req, res) => {
  if (req.url.includes(‘mysite.com‘)) {
    req.headers[‘Authorization‘] = ‘Bearer xxx‘;
  }  
});

Qualquer solicitação ao site fará com que o usuário faça login automaticamente.

Codificar caracteres especiais

Alguns sites bloqueiam caracteres estranhos, como emojis. Podemos executar codificação personalizada nas solicitações:

unblocker.use((req, res) => {
  req.url = encodeURI(req.url);

  // Encode headers, body etc
});

Isso permite que nosso raspador use caracteres especiais sem ser bloqueado.

Como você pode ver, as possibilidades com middlewares de solicitação são infinitas!

Tratamento de respostas

Também podemos transformar os dados de resposta usando os middlewares de resposta:

Analisar e extrair dados

Em vez de extrair dados em nosso scraper, podemos fazer isso diretamente no middleware:

unblocker.use((req, res) => {
  const $ = cheerio.load(res.body);

  res.data = $(‘.result‘).text(); 
});

Agora nosso raspador receberá os dados extraídos salvando diretamente o código.

Filtrar dados confidenciais

Alguns sites retornam cookies, cabeçalhos e outros metadados de que não precisamos. Podemos limpar isso:

unblocker.use((req, res) => {

  // Remove unnecessary cookies
  res.headers[‘set-cookie‘] = []; 

  // Delete other unwanted headers
  delete res.headers[‘x-rate-limit‘];
});

Isso nos fornece apenas os dados de resposta úteis.

Solicitações comuns de cache

Para sites com endpoints acessados ​​com frequência, podemos construir um cache para evitar atingir os limites de taxa:

// In-memory cache
const cache = {};

unblocker.use((req, res) => {
  if (cache[req.url]) {
    return cache[req.url];
  }

  cache[req.url] = res;
});

Agora, solicitações repetidas serão atendidas diretamente do cache.

Como você pode ver, os middlewares de resposta são extremamente poderosos para processar dados diretamente dentro do Node-Unblocker antes que cheguem ao seu raspador.

Node-Unblocker vs outros proxies

O Node-Unblocker fornece um proxy leve em processo para scrapers Node.js. No entanto, também existem serviços de proxy dedicados disponíveis. Vamos comparar os prós e os contras:

Desbloqueador de nós

  • Prós

    • Leve e rápido
    • Middleware personalizável
    • Integra-se diretamente ao raspador Node
  • Desvantagens

    • Precisa gerenciar seus próprios proxies
    • Recursos limitados
    • Não otimizado para escala

Luminati

  • Prós

    • Enorme pool de proxy
    • Gerenciador de proxy avançado
    • Feito para web scraping
  • Desvantagens

    • Exagero para raspadores menores
    • Ferramenta separada para integração

proxy inteligente

  • Prós

    • Planos de proxy acessíveis
    • IPs dedicados disponíveis
    • Integra-se via API REST
  • Desvantagens

    • Precisa de conta separada
    • Personalização limitada

Para raspagem de produção em larga escala, um serviço de proxy comercial como Luminati ou Smartproxy é altamente recomendado. Eles lidam com o gerenciamento de proxy e facilitam a integração por meio de APIs.

Para raspadores pequenos e médios, o Node-Unblocker oferece uma ótima opção durante o processo. A capacidade de personalizá-lo conforme necessário o torna realmente poderoso.

Problemas comuns e como corrigi-los

Ao usar o Node-Unblocker, aqui estão alguns problemas comuns que você pode encontrar e como solucioná-los:

IP de desbloqueio de nó de bloqueio de site

Isso pode acontecer se você usar o mesmo servidor Node-Unblocker para muitas solicitações. A solução é alternar frequentemente seus IPs de proxy upstream que alimentam o Node-Unblocker.

Websockets não funcionam

Certifique-se de que você tem unblocker.listen().on(‘upgrade‘, unblocker.onUpgrade) em seu código para ativar o proxy websocket.

Muitos identificadores de arquivos abertos

O Node-Unblocker pode atingir o limite de arquivos abertos ao lidar com milhares de solicitações. Aumente o máximo de arquivos abertos no Linux ou use um proxy reverso como o Nginx para melhor manuseio de soquetes.

Erros ao raspar sites

Adicionar o debug middleware para Node-Unblocker para registrar todas as solicitações. Isso ajuda a identificar qual solicitação exata está falhando.

Alto uso de memória

Por padrão, o Node-Unblocker armazena os corpos de resposta na memória, o que pode causar picos. Use streaming ou desative o buffer, se necessário.

raspar () é lento

O Node-Unblocker não é otimizado para rendimento ultra-alto. Use um serviço de proxy dedicado como o Smartproxy se precisar maximizar a velocidade.

Ordem de execução do middleware

Tenha em mente a ordem de execução do middleware – por exemplo, o middleware de resposta é executado antes do middleware de solicitação no caminho de volta.

A configuração adequada do Node-Unblocker requer algumas tentativas e erros. Consulte o docs para opções de configuração avançada.

Implantando o Node-Unblocker em escala

Para executar o Node-Unblocker em produção, você precisa hospedá-lo adequadamente em servidores projetados para altas cargas.

Aqui está uma arquitetura recomendada:

Arquitetura do desbloqueador de nós

Consiste no seguinte:

  • Servidores de aplicativos desbloqueadores de nós – Eles contêm a lógica principal do aplicativo proxy. Para cargas altas, use pelo menos 2 a 4 servidores.

  • Proxy reverso (Nginx) – Lidera a frota do Node-Unblocker e equilibra a carga entre eles. Também lida com SSL e outras lógicas de roteamento de borda.

  • banco de dados – Para armazenar quaisquer dados de aplicativos persistentes, como caches, estatísticas, etc. Redis funciona bem.

  • Servidores proxy upstream – Os IPs de proxy externos que alimentam o tráfego no Node-Unblocker. Use pelo menos 50-100+ proxies aqui.

  • cloud Hosting – Use um provedor como AWS ou GCP para gerenciar os servidores, balanceamento de carga, failover e escalabilidade.

A arquitetura adequada de uma implantação do Node-Unblocker pode suportar mais de 100,000 solicitações por dia sem problemas. Certifique-se de testar o sistema em escala antes do lançamento.

Para cargas ainda maiores, utilize um serviço de proxy dedicado como o Oxylabs, que pode lidar facilmente com milhões de solicitações por meio de sua infraestrutura de proxy global.

Melhores práticas para web scraping produtivo

Aqui estão algumas dicas gerais para maximizar o sucesso ao fazer web scraping por meio do Node-Unblocker:

  • Use intervalos de tempo aleatórios – Raspe sites em intervalos aleatórios, não em um ritmo fixo e constante. Isso ajuda a evitar padrões de tráfego que podem desencadear bloqueios.

  • Limitar solicitações por IP – Restrinja as solicitações do Node-Unblocker por IP do proxy upstream a um limite razoável, como 5 RPM, para evitar a queima de IPs.

  • Corresponder à geografia alvo – Use IPs proxy originados da mesma região do público-alvo do seu site alvo. Isso ajuda a evitar bloqueios baseados em localização geográfica.

  • Depurar com registro – Implemente o registro de solicitações para que você possa identificar e reproduzir erros facilmente.

  • Aprenda com os blocos – Quando você for bloqueado, estude a abordagem exata de bloqueio usada e ajuste sua estratégia para evitá-lo no futuro.

  • Alterne servidores regularmente – Alterne seus servidores proxy e infraestrutura a cada poucos meses para atualizar todos os IPs externos.

  • Utilize serviços de proxy – Manter sua própria infraestrutura de proxy é complexo. Aproveite um serviço de proxy corporativo para obter confiabilidade.

A raspagem na Web pode definitivamente ser um desafio. Mas, aproveitando de forma inteligente ferramentas como o Node-Unblocker e seguindo as práticas recomendadas, você pode extrair dados de praticamente qualquer site com sucesso.

Principais lições

Aqui estão os principais itens que abordamos neste guia abrangente de web scraping do Node-Unblocker:

  • O Node-Unblocker fornece um servidor proxy em processo para rotear solicitações de web scraping por meio de
  • Ele permite implementar recursos críticos como rotação de proxy, middlewares personalizados e suporte a websocket
  • A configuração adequada do Node-Unblocker exige tentativa e erro – use a depuração para identificar problemas
  • Para raspagem em grande escala, é recomendado um serviço de proxy dedicado como Luminati ou Smartproxy
  • Seguir as práticas recomendadas de web scraping ajuda a evitar bloqueios e extrair dados de maneira confiável

Node-Unblocker é uma ferramenta versátil que oferece mais controle sobre a lógica de proxy em comparação com serviços externos. Integrá-lo diretamente em seus raspadores abre possibilidades de próximo nível.

Espero que este guia tenha ajudado a desmistificar o Node-Unblocker e como ele pode ajudá-lo a extrair e dimensionar com sucesso a extração de dados de qualquer site! Deixe-me saber se você tem alguma dúvida.

Feliz raspagem (desbloqueada)!

Tags:

Junte-se à conversa

O seu endereço de e-mail não será publicado. Os campos obrigatórios são marcados com *