CAPSOLVER
Blog
Cách sử dụng RestSharp (Thư viện C#) để trích xuất dữ liệu từ web

Cách sử dụng RestSharp (Thư viện C#) để trích xuất dữ liệu từ website

Logo of CapSolver

Anh Tuan

Data Science Expert

17-Sep-2024

Web scraping là kỹ thuật quan trọng để trích xuất dữ liệu từ các trang web, nhưng các ứng dụng web hiện đại thường triển khai các biện pháp bảo mật như CAPTCHA để ngăn chặn truy cập tự động. Các thử thách CAPTCHA, như Google reCAPTCHA, được thiết kế để phân biệt giữa người dùng và bot, khiến các kịch bản tự động gặp khó khăn trong việc trích xuất nội dung hiệu quả.

Để vượt qua những trở ngại này, các nhà phát triển có thể tận dụng các công cụ và dịch vụ đơn giản hóa các yêu cầu HTTP và xử lý việc giải quyết CAPTCHA. RestSharp là một thư viện C# mạnh mẽ và dễ sử dụng, giúp đơn giản hóa quá trình thực hiện các yêu cầu HTTP đến API RESTful. Khi kết hợp với trình phân tích cú pháp HTML như HtmlAgilityPack, nó trở thành một giải pháp mạnh mẽ cho các nhiệm vụ web scraping.

RestSharp WebScraping

Tuy nhiên, việc gặp phải CAPTCHA trong quá trình scraping có thể làm gián đoạn quy trình tự động của bạn. Đây là lúc Capsolver phát huy tác dụng. Capsolver cung cấp các giải pháp dựa trên API để giải quyết CAPTCHA theo cách lập trình, cho phép các kịch bản scraping của bạn bỏ qua những thử thách này và truy cập nội dung mong muốn một cách liền mạch.

Trong hướng dẫn toàn diện này, chúng tôi sẽ hướng dẫn bạn cách:

Web Scraping với RestSharp

Trong C#, RestSharp là một thư viện phổ biến để xử lý các yêu cầu HTTP và tương tác với API RESTful. Nó đơn giản hóa nhiều khía cạnh của giao tiếp HTTP so với HttpClient tích hợp sẵn. Bạn có thể kết hợp RestSharp với trình phân tích cú pháp HTML như HtmlAgilityPack để trích xuất dữ liệu từ các trang web.

Điều kiện tiên quyết

  • Cài đặt thư viện RestSharp bằng NuGet Package Manager:

    bash Copy
    Install-Package RestSharp
  • Cài đặt thư viện HtmlAgilityPack để giúp phân tích cú pháp nội dung HTML:

    bash Copy
    Install-Package HtmlAgilityPack
  • Cài đặt Newtonsoft.Json để xử lý các phản hồi JSON:

    bash Copy
    Install-Package Newtonsoft.Json

Ví dụ: Scraping "Quotes to Scrape"

Hãy scraping các câu trích dẫn từ trang web Quotes to Scrape bằng RestSharpHtmlAgilityPack.

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/";

        // Khởi tạo RestSharp client
        var client = new RestClient(url);

        // Tạo yêu cầu GET
        var request = new RestRequest(Method.GET);

        // Thực hiện yêu cầu
        var response = await client.ExecuteAsync(request);

        if (response.IsSuccessful)
        {
            // Phân tích cú pháp nội dung trang bằng HtmlAgilityPack
            HtmlDocument htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(response.Content);

            // Tìm tất cả các câu trích dẫn trên trang
            var quotes = htmlDoc.DocumentNode.SelectNodes("//span[@class='text']");

            // In mỗi câu trích dẫn
            foreach (var quote in quotes)
            {
                Console.WriteLine(quote.InnerText);
            }
        }
        else
        {
            Console.WriteLine($"Không thể truy xuất trang. Mã trạng thái: {response.StatusCode}");
        }
    }
}

Giải thích:

  • RestSharp Client và Request: Khởi tạo một RestClient với URL đích và tạo một RestRequest cho phương thức GET.
  • Thực hiện yêu cầu: Gửi yêu cầu một cách bất đồng và kiểm tra xem phản hồi có thành công hay không.
  • HtmlAgilityPack: Phân tích cú pháp nội dung HTML từ phản hồi và trích xuất các câu trích dẫn bằng cách chọn các phần tử có lớp text.

Giải quyết reCAPTCHA v2 & reCAPTCHA v3 với Capsolver bằng RestSharp

Khi một trang web sử dụng reCAPTCHA v2 hoặc v3 cho mục đích bảo mật, bạn có thể giải quyết CAPTCHA bằng Capsolver API. Dưới đây là cách bạn có thể tích hợp Capsolver với RestSharp để giải quyết các thử thách reCAPTCHA.

Điều kiện tiên quyết

  • Newtonsoft.Json được sử dụng để xử lý việc phân tích cú pháp JSON từ các phản hồi của Capsolver:

    bash Copy
    Install-Package Newtonsoft.Json

Ví dụ: Giải quyết reCAPTCHA v2 với Capsolver

Trong phần này, chúng ta sẽ trình bày cách giải quyết các thử thách reCAPTCHA v2 bằng Capsolver APIRestSharp.

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"; // Thay thế bằng Khóa API Capsolver của bạn

    static async Task Main(string[] args)
    {
        try
        {
            // Bước 1: Tạo nhiệm vụ để giải quyết reCAPTCHA v2
            string taskId = await CreateTask();
            Console.WriteLine("ID nhiệm vụ: " + taskId);

            // Bước 2: Truy xuất kết quả của nhiệm vụ
            string taskResult = await GetTaskResult(taskId);
            Console.WriteLine("Kết quả nhiệm vụ (Mã thông báo CAPTCHA): " + taskResult);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Lỗi: " + ex.Message);
        }
    }

    // Phương thức để tạo một nhiệm vụ giải quyết CAPTCHA mới
    private static async Task<string> CreateTask()
    {
        // Khởi tạo RestSharp client
        var client = new RestClient(apiUrl);

        // Gói dữ liệu yêu cầu
        var requestBody = new
        {
            clientKey = clientKey,
            task = new
            {
                type = "ReCaptchaV2TaskProxyLess", // Loại nhiệm vụ cho reCAPTCHA v2 không sử dụng proxy
                websiteURL = "https://www.example.com", // URL trang web để giải quyết CAPTCHA
                websiteKey = "SITE_KEY_HERE" // Khóa trang web reCAPTCHA
            }
        };

        // Tạo yêu cầu POST
        var request = new RestRequest("createTask", Method.POST);
        request.AddJsonBody(requestBody);

        // Thực hiện yêu cầu
        var response = await client.ExecuteAsync(request);

        if (!response.IsSuccessful)
        {
            throw new Exception("Không thể tạo nhiệm vụ: " + response.Content);
        }

        JObject jsonResponse = JObject.Parse(response.Content);
        if (jsonResponse["errorId"].ToString() != "0")
        {
            throw new Exception("Lỗi tạo nhiệm vụ: " + jsonResponse["errorDescription"]);
        }

        // Trả về ID nhiệm vụ để sử dụng trong bước tiếp theo
        return jsonResponse["taskId"].ToString();
    }

    // Phương thức để truy xuất kết quả của một nhiệm vụ giải quyết CAPTCHA
    private static async Task<string> GetTaskResult(string taskId)
    {
        // Khởi tạo RestSharp client
        var client = new RestClient(apiUrl);

        // Gói dữ liệu yêu cầu
        var requestBody = new
        {
            clientKey = clientKey,
            taskId = taskId
        };

        // Tạo yêu cầu POST
        var request = new RestRequest("getTaskResult", Method.POST);
        request.AddJsonBody(requestBody);

        // Luôn kiểm tra kết quả của nhiệm vụ mỗi 5 giây
        while (true)
        {
            var response = await client.ExecuteAsync(request);

            if (!response.IsSuccessful)
            {
                throw new Exception("Không thể lấy kết quả nhiệm vụ: " + response.Content);
            }

            JObject jsonResponse = JObject.Parse(response.Content);
            if (jsonResponse["errorId"].ToString() != "0")
            {
                throw new Exception("Lỗi lấy kết quả nhiệm vụ: " + jsonResponse["errorDescription"]);
            }

            // Nếu nhiệm vụ đã sẵn sàng, trả về mã thông báo CAPTCHA
            if (jsonResponse["status"].ToString() == "ready")
            {
                return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
            }

            // Chờ 5 giây trước khi kiểm tra lại
            Console.WriteLine("Nhiệm vụ vẫn đang xử lý, chờ 5 giây...");
            await Task.Delay(5000);
        }
    }
}

Giải thích:

  1. Phương thức CreateTask:

    • RestSharp Client và Request: Khởi tạo một RestClient và tạo một RestRequest cho điểm cuối createTask với phương thức POST.
    • Gói dữ liệu yêu cầu: Thiết lập các tham số cần thiết bao gồm clientKey, websiteURL, websiteKey, và chỉ định loại nhiệm vụ là ReCaptchaV2TaskProxyLess.
    • Thực hiện: Gửi yêu cầu và phân tích cú pháp phản hồi để truy xuất taskId.
  2. Phương thức GetTaskResult:

    • RestSharp Client và Request: Khởi tạo một RestClient và tạo một RestRequest cho điểm cuối getTaskResult với phương thức POST.
    • Kiểm tra: Luôn kiểm tra trạng thái của nhiệm vụ mỗi 5 giây cho đến khi hoàn thành (status: ready).
    • Truy xuất kết quả: Khi nhiệm vụ đã sẵn sàng, nó sẽ trích xuất gRecaptchaResponse, có thể được sử dụng để bỏ qua CAPTCHA.

Ví dụ: Giải quyết reCAPTCHA v3 với Capsolver

Trong phần này, chúng ta sẽ trình bày cách giải quyết các thử thách reCAPTCHA v3 bằng Capsolver APIRestSharp.

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"; // Thay thế bằng Khóa API Capsolver của bạn

    static async Task Main(string[] args)
    {
        try
        {
            // Bước 1: Tạo nhiệm vụ để giải quyết reCAPTCHA v3
            string taskId = await CreateTask();
            Console.WriteLine("ID nhiệm vụ: " + taskId);

            // Bước 2: Truy xuất kết quả của nhiệm vụ
            string taskResult = await GetTaskResult(taskId);
            Console.WriteLine("Kết quả nhiệm vụ (Mã thông báo CAPTCHA): " + taskResult);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Lỗi: " + ex.Message);
        }
    }

    // Phương thức để tạo một nhiệm vụ giải quyết CAPTCHA mới
    private static async Task<string> CreateTask()
    {
        // Khởi tạo RestSharp client
        var client = new RestClient(apiUrl);

        // Gói dữ liệu yêu cầu
        var requestBody = new
        {
            clientKey = clientKey,
            task = new
            {
                type = "ReCaptchaV3TaskProxyLess", // Loại nhiệm vụ cho reCAPTCHA v3 không sử dụng proxy
                websiteURL = "https://www.example.com", // URL trang web để giải quyết CAPTCHA
                websiteKey = "SITE_KEY_HERE", // Khóa trang web reCAPTCHA
                minScore = 0.3, // Điểm tối thiểu mong muốn
                pageAction = "your_action" // Tên hành động được định nghĩa trên trang web
            }
        };

        // Tạo yêu cầu POST
        var request = new RestRequest("createTask", Method.POST);
        request.AddJsonBody(requestBody);

        // Thực hiện yêu cầu
        var response = await client.ExecuteAsync(request);

        if (!response.IsSuccessful)
        {
            throw new Exception("Không thể tạo nhiệm vụ: " + response.Content);
        }

        JObject jsonResponse = JObject.Parse(response.Content);
        if (jsonResponse["errorId"].ToString() != "0")
        {
            throw new Exception("Lỗi tạo nhiệm vụ: " + jsonResponse["errorDescription"]);
        }

        // Trả về ID nhiệm vụ để sử dụng trong bước tiếp theo
        return jsonResponse["taskId"].ToString();
    }

    // Phương thức để truy xuất kết quả của một nhiệm vụ giải quyết CAPTCHA
    private static async Task<string> GetTaskResult(string taskId)
    {
        // Khởi tạo RestSharp client
        var client = new RestClient(apiUrl);

        // Gói dữ liệu yêu cầu
        var requestBody = new
        {
            clientKey = clientKey,
            taskId = taskId
        };

        // Tạo yêu cầu POST
        var request = new RestRequest("getTaskResult", Method.POST);
        request.AddJsonBody(requestBody);

        // Luôn kiểm tra kết quả của nhiệm vụ mỗi 5 giây
        while (true)
        {
            var response = await client.ExecuteAsync(request);

            if (!response.IsSuccessful)
            {
                throw new Exception("Không thể lấy kết quả nhiệm vụ: " + response.Content);
            }

            JObject jsonResponse = JObject.Parse(response.Content);
            if (jsonResponse["errorId"].ToString() != "0")
            {
                throw new Exception("Lỗi lấy kết quả nhiệm vụ: " + jsonResponse["errorDescription"]);
            }

            // Nếu nhiệm vụ đã sẵn sàng, trả về mã thông báo CAPTCHA
            if (jsonResponse["status"].ToString() == "ready")
            {
                return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
            }

            // Chờ 5 giây trước khi kiểm tra lại
            Console.WriteLine("Nhiệm vụ vẫn đang xử lý, chờ 5 giây...");
            await Task.Delay(5000);
        }
    }
}

Giải thích:

  1. Phương thức CreateTask:

    • RestSharp Client và Request: Thiết lập một RestClientRestRequest cho điểm cuối createTask.
    • Gói dữ liệu yêu cầu: Bao gồm các tham số bổ sung như minScorepageAction dành riêng cho reCAPTCHA v3.
    • Thực hiện: Gửi yêu cầu và truy xuất taskId.
  2. Phương thức GetTaskResult:

    • Tương tự như ví dụ v2, nó luôn kiểm tra Capsolver API để tìm kết quả của nhiệm vụ và truy xuất mã thông báo CAPTCHA khi nhiệm vụ đã sẵn sàng.

Các thực hành tốt nhất về Web Scraping trong C#

Khi sử dụng các công cụ web scraping trong C#, luôn tuân theo các thực hành tốt nhất này:

  • Tôn trọng robots.txt: Đảm bảo rằng trang web cho phép web scraping bằng cách kiểm tra tệp robots.txt.
  • Hạn chế tốc độ: Tránh thực hiện quá nhiều yêu cầu trong một khoảng thời gian ngắn để ngăn chặn bị chặn bởi trang web.
  • Luân phiên proxy: Sử dụng proxy để phân phối các yêu cầu qua nhiều IP để tránh bị gắn nhãn là bot.
  • Giả mạo tiêu đề: Mô phỏng các yêu cầu giống như trình duyệt bằng cách thêm tiêu đề tùy chỉnh, chẳng hạn như User-Agent, vào các yêu cầu HTTP của bạn.

Kết luận

Bằng cách sử dụng RestSharp cho web scraping và Capsolver để giải quyết CAPTCHA, bạn có thể tự động hóa hiệu quả các tương tác với các trang web sử dụng CAPTCHA. Luôn đảm bảo rằng các hoạt động web scraping của bạn tuân thủ các điều khoản dịch vụ và yêu cầu pháp lý của trang web đích.

Chúc bạn scraping vui vẻ!


Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.

Thêm

Khắc phục Lỗi 1005 Cloudflare: Hướng dẫn và Giải pháp Thu thập dữ liệu web
Khắc phục Lỗi 1005 Cloudflare: Hướng dẫn Gỡ mã web và Giải pháp

Học cách khắc phục lỗi Cloudflare Error 1005 bị từ chối truy cập khi quét dữ liệu. Khám phá các giải pháp như proxy nhà ở, dấu vân tay trình duyệt và CapSolver cho CAPTCHA. Tối ưu hóa việc trích xuất dữ liệu.

Cloudflare
Logo of CapSolver

Adélia Cruz

27-Mar-2026

OpenBrowser Sử dụng CapSolver
Làm thế nào để giải CAPTCHA trong OpenBrowser bằng cách sử dụng CapSolver (Hướng dẫn tự động hóa AI Agent)

Giải CAPTCHA trong OpenBrowser bằng CapSolver. Tự động hóa reCAPTCHA, Turnstile và hơn thế nữa cho các tác nhân AI một cách dễ dàng.

AI
Logo of CapSolver

Anh Tuan

26-Mar-2026

HyperBrowser với CapSolver
Cách giải CAPTCHA bất kỳ trong HyperBrowser bằng CapSolver (Hướng dẫn cài đặt đầy đủ)

Giải bất kỳ CAPTCHA nào trong HyperBrowser bằng CapSolver. Tự động hóa reCAPTCHA, Turnstile, AWS WAF và nhiều thứ khác một cách dễ dàng.

AI
Logo of CapSolver

Anh Tuan

26-Mar-2026

Cách giải reCAPTCHA v2 Python và API
Cách giải reCAPTCHA v2 Python và API

Học cách giải reCAPTCHA v2 bằng Python và API. Hướng dẫn toàn diện này bao gồm các phương pháp Proxy và không dùng Proxy cùng với mã nguồn có thể triển khai cho tự động hóa.

reCAPTCHA
Logo of CapSolver

Rajinder Singh

25-Mar-2026

Cách giải quyết CAPTCHA của Amazon AWS WAF trong Tự động hóa trình duyệt
Cách giải quyết CAPTCHA WAF của Amazon AWS trong Tự động hóa trình duyệt

Nâng cao kỹ năng giải quyết các thách thức CAPTCHA của Amazon AWS WAF trong tự động hóa trình duyệt với các chiến lược chuyên gia. Học cách tích hợp CapSolver để có các quy trình tự động hóa liền mạch và hiệu quả. Hướng dẫn này bao gồm các giải pháp dựa trên token và phân loại.

AWS WAF
Logo of CapSolver

Aloísio Vítor

24-Mar-2026

Giải quyết Captcha cho các tác nhân AI theo dõi giá: Hướng dẫn từng bước
Giải quyết CAPTCHA cho các tác nhân AI theo dõi giá: Hướng dẫn từng bước

Học cách giải quyết hiệu quả CAPTCHAs cho các trợ lý AI theo dõi giá cả với CapSolver. Hướng dẫn từng bước này đảm bảo thu thập dữ liệu không gián đoạn và nhìn nhận thị trường được cải thiện.

AI
Logo of CapSolver

Rajinder Singh

24-Mar-2026