Como Usar RestSharp (Biblioteca C#) para Web Scraping

Aloísio Vítor
Image Processing Expert
17-Sep-2024

Web scraping é uma técnica essencial para extrair dados de sites, mas as aplicações web modernas geralmente implementam medidas de segurança, como desafios CAPTCHA, para evitar acesso automatizado. Os desafios CAPTCHA, como o Google reCAPTCHA, são projetados para diferenciar usuários humanos de bots, tornando difícil para scripts automatizados raspar conteúdo de forma eficaz.
Para superar esses obstáculos, os desenvolvedores podem utilizar ferramentas e serviços que simplificam as solicitações HTTP e manipulam a resolução de CAPTCHA. RestSharp é uma biblioteca C# poderosa e fácil de usar que simplifica o processo de fazer solicitações HTTP para APIs RESTful. Quando combinada com um analisador HTML como o HtmlAgilityPack, ela se torna uma solução robusta para tarefas de web scraping.

No entanto, encontrar desafios CAPTCHA durante o scraping pode interromper seu processo de automação. É aí que o Capsolver entra em ação. O Capsolver oferece soluções baseadas em API para resolver CAPTCHAs programaticamente, permitindo que seus scripts de scraping ignorem esses desafios e acessem o conteúdo desejado perfeitamente.
Neste guia abrangente, vamos guiá-lo através de:
- Raspar sites usando RestSharp e HtmlAgilityPack.
- Resolver desafios reCAPTCHA usando a API Capsolver.
Web Scraping com RestSharp
Em C#, RestSharp é uma biblioteca popular para lidar com solicitações HTTP e interagir com APIs RESTful. Ele simplifica muitos aspectos da comunicação HTTP em comparação com o HttpClient integrado. Você pode combinar o RestSharp com um analisador HTML como HtmlAgilityPack para extrair dados de páginas da web.
Pré-requisitos
-
Instale a biblioteca RestSharp usando o Gerenciador de Pacotes NuGet:
bashInstall-Package RestSharp -
Instale a biblioteca HtmlAgilityPack para ajudar a analisar o conteúdo HTML:
bashInstall-Package HtmlAgilityPack -
Instale Newtonsoft.Json para lidar com respostas JSON:
bashInstall-Package Newtonsoft.Json
Exemplo: Scraping "Quotes to Scrape"
Vamos raspar citações do site Quotes to Scrape usando RestSharp e HtmlAgilityPack.
csharp
using System;
using System.Threading.Tasks;
using HtmlAgilityPack;
using RestSharp;
class Program
{
static async Task Main(string[] args)
{
string url = "http://quotes.toscrape.com/";
// Inicialize o cliente RestSharp
var client = new RestClient(url);
// Crie uma solicitação GET
var request = new RestRequest(Method.GET);
// Execute a solicitação
var response = await client.ExecuteAsync(request);
if (response.IsSuccessful)
{
// Analise o conteúdo da página usando HtmlAgilityPack
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(response.Content);
// Encontre todas as citações na página
var quotes = htmlDoc.DocumentNode.SelectNodes("//span[@class='text']");
// Imprima cada citação
foreach (var quote in quotes)
{
Console.WriteLine(quote.InnerText);
}
}
else
{
Console.WriteLine($"Falha ao recuperar a página. Código de Status: {response.StatusCode}");
}
}
}
Explicação:
- Cliente e Solicitação RestSharp: Inicializa um
RestClientcom a URL de destino e cria umRestRequestpara o método GET. - Executando a Solicitação: Envia a solicitação assincronamente e verifica se a resposta é bem-sucedida.
- HtmlAgilityPack: Analisa o conteúdo HTML da resposta e extrai as citações selecionando elementos com a classe
text.
Resolvendo reCAPTCHA v2 e reCAPTCHA v3 com Capsolver usando RestSharp
Quando um site usa reCAPTCHA v2 ou v3 para segurança, você pode resolver o CAPTCHA usando a API Capsolver. Abaixo está como você pode integrar o Capsolver com RestSharp para resolver desafios reCAPTCHA.
Pré-requisitos
-
Newtonsoft.Json é usado para lidar com a análise JSON de respostas do Capsolver:
bashInstall-Package Newtonsoft.Json
Exemplo: Resolvendo reCAPTCHA v2 com Capsolver
Nesta seção, demonstraremos como resolver desafios reCAPTCHA v2 usando a API Capsolver e RestSharp.
csharp
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
class Program
{
private static readonly string apiUrl = "https://api.capsolver.com";
private static readonly string clientKey = "YOUR_API_KEY"; // Substitua pela sua Chave da API Capsolver
static async Task Main(string[] args)
{
try
{
// Passo 1: Crie uma tarefa para resolver reCAPTCHA v2
string taskId = await CreateTask();
Console.WriteLine("ID da Tarefa: " + taskId);
// Passo 2: Recupere o resultado da tarefa
string taskResult = await GetTaskResult(taskId);
Console.WriteLine("Resultado da Tarefa (Token CAPTCHA): " + taskResult);
}
catch (Exception ex)
{
Console.WriteLine("Erro: " + ex.Message);
}
}
// Método para criar uma nova tarefa de resolução CAPTCHA
private static async Task<string> CreateTask()
{
// Inicialize o cliente RestSharp
var client = new RestClient(apiUrl);
// Carga útil da solicitação
var requestBody = new
{
clientKey = clientKey,
task = new
{
type = "ReCaptchaV2TaskProxyLess", // Tipo de tarefa para reCAPTCHA v2 sem proxy
websiteURL = "https://www.example.com", // A URL do site para resolver CAPTCHA
websiteKey = "SITE_KEY_HERE" // Chave do site reCAPTCHA
}
};
// Crie uma solicitação POST
var request = new RestRequest("createTask", Method.POST);
request.AddJsonBody(requestBody);
// Execute a solicitação
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Falha ao criar a tarefa: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Erro ao criar a tarefa: " + jsonResponse["errorDescription"]);
}
// Retorne o ID da tarefa para ser usado na próxima etapa
return jsonResponse["taskId"].ToString();
}
// Método para recuperar o resultado de uma tarefa de resolução CAPTCHA
private static async Task<string> GetTaskResult(string taskId)
{
// Inicialize o cliente RestSharp
var client = new RestClient(apiUrl);
// Carga útil da solicitação
var requestBody = new
{
clientKey = clientKey,
taskId = taskId
};
// Crie uma solicitação POST
var request = new RestRequest("getTaskResult", Method.POST);
request.AddJsonBody(requestBody);
// Sondar o resultado da tarefa a cada 5 segundos
while (true)
{
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Falha ao obter o resultado da tarefa: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Erro ao obter o resultado da tarefa: " + jsonResponse["errorDescription"]);
}
// Se a tarefa estiver pronta, retorne o token CAPTCHA
if (jsonResponse["status"].ToString() == "ready")
{
return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
}
// Espere 5 segundos antes de verificar novamente
Console.WriteLine("A tarefa ainda está sendo processada, esperando 5 segundos...");
await Task.Delay(5000);
}
}
}
Explicação:
-
Método CreateTask:
- Cliente e Solicitação RestSharp: Inicializa um
RestCliente cria umRestRequestpara o endpointcreateTaskcom o método POST. - Carga Útil da Solicitação: Define os parâmetros necessários, incluindo
clientKey,websiteURL,websiteKeye especifica o tipo de tarefa comoReCaptchaV2TaskProxyLess. - Execução: Envia a solicitação e analisa a resposta para recuperar o
taskId.
- Cliente e Solicitação RestSharp: Inicializa um
-
Método GetTaskResult:
- Cliente e Solicitação RestSharp: Inicializa um
RestCliente cria umRestRequestpara o endpointgetTaskResultcom o método POST. - Sondagem: Sondar continuamente o status da tarefa a cada 5 segundos até que ela seja concluída (
status: ready). - Recuperação do Resultado: Uma vez que a tarefa esteja pronta, ela extrai o
gRecaptchaResponse, que pode ser usado para contornar o CAPTCHA.
- Cliente e Solicitação RestSharp: Inicializa um
Exemplo: Resolvendo reCAPTCHA v3 com Capsolver
Nesta seção, demonstraremos como resolver desafios reCAPTCHA v3 usando a API Capsolver e RestSharp.
csharp
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
class Program
{
private static readonly string apiUrl = "https://api.capsolver.com";
private static readonly string clientKey = "YOUR_API_KEY"; // Substitua pela sua Chave da API Capsolver
static async Task Main(string[] args)
{
try
{
// Passo 1: Crie uma tarefa para resolver reCAPTCHA v3
string taskId = await CreateTask();
Console.WriteLine("ID da Tarefa: " + taskId);
// Passo 2: Recupere o resultado da tarefa
string taskResult = await GetTaskResult(taskId);
Console.WriteLine("Resultado da Tarefa (Token CAPTCHA): " + taskResult);
}
catch (Exception ex)
{
Console.WriteLine("Erro: " + ex.Message);
}
}
// Método para criar uma nova tarefa de resolução CAPTCHA
private static async Task<string> CreateTask()
{
// Inicialize o cliente RestSharp
var client = new RestClient(apiUrl);
// Carga útil da solicitação
var requestBody = new
{
clientKey = clientKey,
task = new
{
type = "ReCaptchaV3TaskProxyLess", // Tipo de tarefa para reCAPTCHA v3 sem proxy
websiteURL = "https://www.example.com", // A URL do site para resolver CAPTCHA
websiteKey = "SITE_KEY_HERE", // Chave do site reCAPTCHA
minScore = 0.3, // Pontuação mínima desejada
pageAction = "your_action" // Nome da ação definido no site
}
};
// Crie uma solicitação POST
var request = new RestRequest("createTask", Method.POST);
request.AddJsonBody(requestBody);
// Execute a solicitação
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Falha ao criar a tarefa: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Erro ao criar a tarefa: " + jsonResponse["errorDescription"]);
}
// Retorne o ID da tarefa para ser usado na próxima etapa
return jsonResponse["taskId"].ToString();
}
// Método para recuperar o resultado de uma tarefa de resolução CAPTCHA
private static async Task<string> GetTaskResult(string taskId)
{
// Inicialize o cliente RestSharp
var client = new RestClient(apiUrl);
// Carga útil da solicitação
var requestBody = new
{
clientKey = clientKey,
taskId = taskId
};
// Crie uma solicitação POST
var request = new RestRequest("getTaskResult", Method.POST);
request.AddJsonBody(requestBody);
// Sondar o resultado da tarefa a cada 5 segundos
while (true)
{
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Falha ao obter o resultado da tarefa: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Erro ao obter o resultado da tarefa: " + jsonResponse["errorDescription"]);
}
// Se a tarefa estiver pronta, retorne o token CAPTCHA
if (jsonResponse["status"].ToString() == "ready")
{
return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
}
// Espere 5 segundos antes de verificar novamente
Console.WriteLine("A tarefa ainda está sendo processada, esperando 5 segundos...");
await Task.Delay(5000);
}
}
}
Explicação:
-
Método CreateTask:
- Cliente e Solicitação RestSharp: Define um
RestClienteRestRequestpara o endpointcreateTask. - Carga Útil da Solicitação: Inclui parâmetros adicionais como
minScoreepageActionespecíficos para reCAPTCHA v3. - Execução: Envia a solicitação e recupera o
taskId.
- Cliente e Solicitação RestSharp: Define um
-
Método GetTaskResult:
- Semelhante ao exemplo v2, ele sondar a API Capsolver para o resultado da tarefa e recupera o token CAPTCHA quando a tarefa estiver pronta.
Boas Práticas de Web Scraping em C#
Ao usar ferramentas de web scraping em C#, siga sempre essas boas práticas:
- Respeite
robots.txt: Certifique-se de que o site permite web scraping verificando o arquivorobots.txt. - Limitação de Taxa: Evite fazer muitas solicitações em um curto período de tempo para evitar ser bloqueado pelo site.
- Rotação de Proxy: Use proxies para distribuir solicitações entre vários IPs para evitar ser marcado como um bot.
- Spoof Headers: Simule solicitações semelhantes a navegadores adicionando cabeçalhos personalizados, como
User-Agent, às suas solicitações HTTP.
Conclusão
Usando RestSharp para web scraping e Capsolver para resolução de CAPTCHA, você pode automatizar de forma eficaz as interações com sites que empregam desafios CAPTCHA. Certifique-se sempre de que suas atividades de web scraping estejam em conformidade com os termos de serviço e requisitos legais do site de destino.
Feliz scraping!
Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.
Mais

Escala da Coleta de Dados para Treinamento de Grandes Modelos de Linguagem: Resolvendo CAPTCHAs em Escala
Aprenda como escalar a coleta de dados para o treinamento de LLM resolvendo CAPTCHAs em larga escala. Descubra estratégias automatizadas para construir conjuntos de dados de alta qualidade para modelos de IA.

Adélia Cruz
27-Mar-2026

Corrigir o Erro 1005 do Cloudflare: Guia de Web Scraping e Soluções
Aprenda a corrigir o Erro 1005 do Cloudflare acesso negado durante o web scraping. Descubra soluções como proxies residenciais, fingerprinting de navegador e CapSolver para CAPTCHA. Otimize sua extração de dados.

Rajinder Singh
27-Mar-2026

Como resolver qualquer CAPTCHA no HyperBrowser usando o CapSolver (Guia Completo de Configuração)
Resolva qualquer CAPTCHA no HyperBrowser usando o CapSolver. Automatize reCAPTCHA, Turnstile, AWS WAF e de forma mais fácil.

Adélia Cruz
26-Mar-2026

Como resolver o CAPTCHA do Amazon AWS WAF na Automação de Navegador
Domine a resolução de desafios CAPTCHA do Amazon AWS WAF na automação de navegador com estratégias especializadas. Aprenda a integrar o CapSolver para fluxos de automação sem interrupções e eficientes. Este guia aborda soluções baseadas em tokens e em classificação.

Nikolai Smirnov
24-Mar-2026

Resolvendo Captchas para Agentes de IA de Monitoramento de Preços: Um Guia Passo a Passo
Aprenda como resolver efetivamente CAPTCHAs para agentes de inteligência artificial de monitoramento de preços com o CapSolver. Este guia passo a passo garante coleta de dados ininterrupta e insights de mercado aprimorados.

Adélia Cruz
24-Mar-2026

Como resolver automaticamente CAPTCHAs com NanoClaw e CapSolver
Guia passo a passo para usar o CapSolver com o NanoClaw para resolver automaticamente reCAPTCHA, Turnstile, AWS WAF e outros CAPTCHAs. Funciona com agentes do Claude AI, sem código e navegadores múltiplos.

Aloísio Vítor
20-Mar-2026

