CAPSOLVER
Blog
Como usar RestSharp (Biblioteca C#) para Web Scraping

Como Usar RestSharp (Biblioteca C#) para Web Scraping

Logo of CapSolver

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.

RestSharp WebScraping

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:

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:

    bash Copy
    Install-Package RestSharp
  • Instale a biblioteca HtmlAgilityPack para ajudar a analisar o conteúdo HTML:

    bash Copy
    Install-Package HtmlAgilityPack
  • Instale Newtonsoft.Json para lidar com respostas JSON:

    bash Copy
    Install-Package Newtonsoft.Json

Exemplo: Scraping "Quotes to Scrape"

Vamos raspar citações do site Quotes to Scrape usando RestSharp e HtmlAgilityPack.

csharp Copy
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 RestClient com a URL de destino e cria um RestRequest para 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:

    bash Copy
    Install-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 Copy
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:

  1. Método CreateTask:

    • Cliente e Solicitação RestSharp: Inicializa um RestClient e cria um RestRequest para o endpoint createTask com o método POST.
    • Carga Útil da Solicitação: Define os parâmetros necessários, incluindo clientKey, websiteURL, websiteKey e especifica o tipo de tarefa como ReCaptchaV2TaskProxyLess.
    • Execução: Envia a solicitação e analisa a resposta para recuperar o taskId.
  2. Método GetTaskResult:

    • Cliente e Solicitação RestSharp: Inicializa um RestClient e cria um RestRequest para o endpoint getTaskResult com 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.

Exemplo: Resolvendo reCAPTCHA v3 com Capsolver

Nesta seção, demonstraremos como resolver desafios reCAPTCHA v3 usando a API Capsolver e RestSharp.

csharp Copy
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:

  1. Método CreateTask:

    • Cliente e Solicitação RestSharp: Define um RestClient e RestRequest para o endpoint createTask.
    • Carga Útil da Solicitação: Inclui parâmetros adicionais como minScore e pageAction específicos para reCAPTCHA v3.
    • Execução: Envia a solicitação e recupera o taskId.
  2. 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 arquivo robots.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