Integração

Use a Shifter com Cheerio

Combine os proxies residenciais e de ISP do Shifter com o Cheerio para um scraping em Node rápido e enxuto. O Cheerio cuida do parsing de HTML no estilo jQuery, o Shifter cuida dos IPs residenciais, sem necessidade de navegador headless.

Início Rápido

Instalar

npm install cheerio axios https-proxy-agent

Uso Básico

import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";
import { load } from "cheerio";

const proxyUrl =
  "customer-USERNAME-country-us-sid-123ABC:PASSWORD@p.shifter.io:443";

const { data: html } = await axios.get("https://example.com", {
  httpsAgent: new HttpsProxyAgent(proxyUrl),
  proxy: false,
});

const $ = load(html);
console.log($("h1").text());

$("article.post").each((_, el) => {
  console.log($(el).find("h2").text(), "->", $(el).find("a").attr("href"));
});

Recursos

Combina perfeitamente com axios, got, got-scraping, undici e qualquer cliente HTTP que suporte uma URL de proxy
Rotação por requisição por padrão, com `sid` para sessões persistentes e `ttl-N` para fixações por tempo de N segundos
Compatível com Crawlee, Apify e qualquer framework de crawler de produção que aceite uma URL de proxy
Geo-direcionamento em 195+ países via parâmetros de nome de usuário: country, region, city, ASN
Ordens de magnitude mais rápido que scraping com navegador headless para alvos estáticos ou com pouco JS
Compatível com TypeScript, ESM, CommonJS e todo LTS do Node.js a partir da versão 14

Exemplos

Sessão Sticky + Crawl de Múltiplas Páginas

Fixe um IP residencial durante todo um rastreamento de múltiplas páginas. Adicione `country-uk` para segmentação geográfica e `ttl-300` para estender a janela fixa para 5 minutos.

import axios, { type AxiosInstance } from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";
import { load } from "cheerio";
import { randomBytes } from "node:crypto";

function makeClient(country: string): AxiosInstance {
  const sid = randomBytes(4).toString("hex");
  const proxyUrl =
    `customer-USERNAME-country-${country}-sid-${sid}-ttl-300:` +
    `PASSWORD@p.shifter.io:443`;

  return axios.create({
    httpsAgent: new HttpsProxyAgent(proxyUrl),
    proxy: false,
    timeout: 30_000,
    headers: {
      "User-Agent":
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
      "Accept-Language": "en-US,en;q=0.9",
    },
  });
}

const client = makeClient("uk");

let url: string | null = "https://example.co.uk/products";
const products: { title: string; price: string }[] = [];

while (url) {
  const { data: html } = await client.get(url);
  const $ = load(html);

  $(".product-card").each((_, el) => {
    products.push({
      title: $(el).find("h2").text().trim(),
      price: $(el).find(".price").text().trim(),
    });
  });

  const next = $("a.next-page").attr("href");
  url = next ? new URL(next, url).toString() : null;
}

console.log(`Scraped ${products.length} products`);

Scraping Paralelo (rotação por requisição)

Remova o sid para rotação por requisição. Cada busca paralela recebe um IP residencial diferente, perfeito para acessar uma lista de URLs sem acionar limites de taxa por IP.

import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";
import { load } from "cheerio";

function rotatingClient() {
  // No sid -> Shifter rotates the residential IP per request.
  const proxyUrl =
    "customer-USERNAME-country-us:PASSWORD@p.shifter.io:443";

  return axios.create({
    httpsAgent: new HttpsProxyAgent(proxyUrl),
    proxy: false,
    timeout: 30_000,
  });
}

async function scrape(url: string) {
  const client = rotatingClient();
  const { data: html } = await client.get(url);
  const $ = load(html);

  return {
    url,
    title: $("h1").first().text().trim(),
    headings: $("h2").map((_, el) => $(el).text().trim()).get(),
  };
}

const urls = [
  "https://example.com/category/laptops",
  "https://example.com/category/phones",
  "https://example.com/category/tablets",
  "https://example.com/category/wearables",
];

const results = await Promise.all(urls.map(scrape));
console.log(results);

got-scraping (impressões digitais de navegador integradas)

O got-scraping empacota geração realista de cabeçalhos em cima do got. Combine com o Shifter para obter um scraper HTTP pequeno e com formato de navegador que ainda é 100x mais rápido que o Puppeteer.

// npm install got-scraping cheerio
import { gotScraping } from "got-scraping";
import { load } from "cheerio";

const proxyUrl =
  "customer-USERNAME-country-de-city-berlin-sid-456DEF:PASSWORD@p.shifter.io:443";

const html = await gotScraping({
  url: "https://example.de/products",
  proxyUrl,
  headerGeneratorOptions: {
    browsers: [{ name: "chrome", minVersion: 120 }],
    devices: ["desktop"],
    locales: ["de-DE", "en"],
    operatingSystems: ["macos", "linux"],
  },
}).text();

const $ = load(html);

$(".product").each((_, el) => {
  console.log({
    title: $(el).find("h2").text().trim(),
    price: $(el).find(".price").text().trim(),
  });
});

Crawlee (crawler de produção com Shifter)

O Crawlee (da Apify) lida com filas, tentativas, persistência e rotação de proxy prontos para uso. Conecte o Shifter como um ProxyConfiguration e deixe o Crawlee orquestrar o resto.

// npm install crawlee cheerio
import { CheerioCrawler, ProxyConfiguration } from "crawlee";

const proxyConfiguration = new ProxyConfiguration({
  newUrlFunction: () => {
    // New residential IP per session. Crawlee rotates sessions
    // automatically on bans, so stale IPs get cycled out.
    const sid = Math.random().toString(36).slice(2, 10);
    return `customer-USERNAME-country-fr-sid-${sid}:PASSWORD@p.shifter.io:443`;
  },
});

const crawler = new CheerioCrawler({
  proxyConfiguration,
  maxConcurrency: 8,
  async requestHandler({ request, $, enqueueLinks, log }) {
    log.info(`${request.url} -> ${$("h1").text().trim()}`);

    $(".article").each((_, el) => {
      log.info(`  ${$(el).find("h2").text().trim()}`);
    });

    await enqueueLinks({ selector: "a.next-page", strategy: "same-domain" });
  },
});

await crawler.run([
  "https://example.fr/blog",
  "https://example.fr/news",
]);
Perguntas Frequentes

Perguntas frequentes

Perguntas comuns sobre usar o Shifter com Cheerio.

Não. Cheerio é um analisador (parser), ele não faz requisições HTTP. O proxy é configurado no cliente HTTP que você combinar com o Cheerio (axios, got, undici, fetch). Depois que o HTML for obtido através do Shifter, você o passa para a função load() do Cheerio normalmente.

Configure o axios com um https-proxy-agent apontando para p.shifter.io:443 (com as credenciais embutidas). Busque a página, passe response.data para cheerio.load() e faça consultas como faria com jQuery. A configuração completa tem cerca de 10 linhas de código.

Use o Cheerio sempre que os dados que você precisa estiverem no payload HTML inicial, é de 10 a 100 vezes mais rápido do que o Chrome headless e usa uma fração minúscula da memória. Mude para o Puppeteer ou o Playwright somente quando a página hidratar o conteúdo no lado do cliente via JavaScript.

Adicione um ID de sessão ao nome de usuário do proxy, por exemplo, `customer-USERNAME-country-us-sid-123ABC`. Reutilize a mesma instância do axios em todas as buscas durante a execução do crawl e o Shifter continuará retornando o mesmo IP residencial. Adicione `ttl-N` para estender a vida útil.

Sim. O Crawlee vem com um CheerioCrawler que lida com fila, novas tentativas e concorrência. Configure o Shifter através do ProxyConfiguration do Crawlee com um newUrlFunction que retorna uma nova URL do Shifter com um sid exclusivo por sessão.

Sim. O got-scraping aceita uma opção `proxyUrl` e lida com a negociação do proxy de forma transparente. Combinado com seu gerador de cabeçalhos integrado (que imita fingerprints reais de navegadores), é uma excelente alternativa leve aos navegadores headless.

Começar

Comece a Usar o Shifter com Cheerio

Combine os 205M+ proxies residenciais e de ISP do Shifter com o Cheerio para um scraping em Node rápido e enxuto. Rotação por solicitação, sessões fixas (sticky sessions) e suporte completo ao Crawlee.

Experimente o Shifter GratuitamenteConfigure em minutos. Cancele quando quiser.