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

Qual é a melhor extensão para resolver CAPTCHA 2026?
No mundo em constante evolução da segurança online, os desafios CAPTCHA tornaram-se uma barreira comum para os usuários da internet...

Sora Fujimoto
12-Dec-2025

Lumiproxy: Proxy Premium para Scraping de Web e Coleta de Dados
Neste artigo, mostraremos o que é Lumiproxy e os serviços que eles oferecem.

Ethan Collins
12-Dec-2025

Genlogin: Revolutionar sua experiência de automação da web
Neste artigo, vamos mostrar para você o que é o Genlogin e os serviços que eles oferecem.

Rajinder Singh
12-Dec-2025

Proxys.io: Proxies individuais para qualquer tarefa
Neste artigo, vamos mostrar para você o que é o Proxys.io e os serviços que eles oferecem.

Rajinder Singh
12-Dec-2025

Tabproxy: Bom custo proxy residencial internacional
Neste artigo, vamos mostrar para você o que é o Tabproxy e os serviços que eles oferecem.

Ethan Collins
12-Dec-2025

O que são erros 402, 403, 404 e 429 em raspagem de web? Um Guia Completo
Domine o tratamento de erros de raspagem de web entendendo o que são os erros 402, 403, 404 e 429. Aprenda a corrigir o erro 403 Proibido, implementar soluções para o erro de limitação de taxa 429 e tratar o código de status Payment Required emergente 402.

Lucas Mitchell
12-Dec-2025

