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

Ferramentas de Raspagem de Dados Instantâneas: Métodos Rápidos para Extrair Dados da Web Sem Código
Descubra as melhores ferramentas de raspagem de dados instantâneas para 2026. Aprenda formas rápidas de extrair dados da web sem código usando as melhores extensões e APIs para extração automatizada.

Emma Foster
28-Jan-2026

Uso do Navegador vs Browserbase: Qual Ferramenta de Automação de Navegador é Melhor para Agentes de IA?
Compare o uso do navegador vs Browserbase para automação de agentes de IA. Descubra funcionalidades, preços e como resolver CAPTCHAs com o CapSolver para fluxos de trabalho sem interrupções.

Adélia Cruz
26-Jan-2026

Top 9 Frameworks de Agentes de IA em 2026
Descubra os 9 principais frameworks de agentes de IA para 2026, incluindo CrewAI, AutoGen e LangGraph. Aprenda como escolher o melhor framework para orquestração de agentes multi e desenvolvimento de agentes autônomos, e descubra ferramentas essenciais para interação web no mundo real.

Sora Fujimoto
26-Jan-2026

Bloqueios de IP em 2026: Como Funcionam e Métodos Práticos para Contornar Eles
Aprenda como burlar o banimento de IP em 2026 com nosso guia abrangente. Descubra técnicas modernas de bloqueio de IP e soluções práticas como proxies residenciais e solucionadores de CAPTCHA.

Adélia Cruz
26-Jan-2026

Como resolver Captcha no Maxun com Integração do CapSolver
Um guia prático para integrar o CapSolver com o Maxun para raspagem de web realista. Aprenda como lidar com reCAPTCHA, Cloudflare Turnstile e sites protegidos por CAPTCHA usando fluxos de trabalho de pré-autenticação e robô.

Adélia Cruz
21-Jan-2026

Melhores Ferramentas de Extração de Dados para Usar em 2026 (Comparação Completa)
Descubra as melhores ferramentas de extração de dados para 2026. Compare as principais plataformas de raspagem de web, ETL e com inteligência artificial para automatizar sua coleta de dados e fluxos de trabalho de IA.

Adélia Cruz
21-Jan-2026

