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

Công cụ Ghi Dữ Liệu Nhanh: Cách Nhanh Chóng Trích Xuất Dữ Liệu Từ Web Không Cần Mã
Công cụ Ghi dữ liệu Nhanh: Cách nhanh chóng trích xuất dữ liệu web mà không cần code

Khám phá các công cụ trích xuất dữ liệu tức thì tốt nhất cho năm 2026. Học các cách nhanh chóng để trích xuất dữ liệu từ web mà không cần mã nguồn bằng cách sử dụng các tiện ích mở rộng hàng đầu và API để trích xuất tự động.

web scraping
Logo of CapSolver

Nikolai Smirnov

28-Jan-2026

Trích xuất dữ liệu từ web bài báo tin tức
Thu thập dữ liệu từ web các bài báo tin tức bằng Python (Hướng dẫn 2026)

Nắm vững trích xuất dữ liệu từ web bài báo tin tức bằng Python vào năm 2026. Học cách giải reCAPTCHA v2/v3 bằng CapSolver và xây dựng các pipeline dữ liệu có thể mở rộng.

web scraping
Logo of CapSolver

Anh Tuan

28-Jan-2026

Sử dụng Trình duyệt so với Browserbase: Công cụ tự động hóa trình duyệt nào tốt hơn cho các tác nhân AI?
Cách sử dụng trình duyệt so với Browserbase: Công cụ tự động hóa trình duyệt nào tốt hơn cho các tác nhân AI?

So sánh Browser Use với Browserbase cho tự động hóa bằng trợ lý AI. Khám phá tính năng, giá cả và cách giải CAPTCHAs bằng CapSolver để có luồng công việc mượt mà.

AI
Logo of CapSolver

Aloísio Vítor

27-Jan-2026

Top 9 Khung nền tảng AI vào năm 2026
Top 9 Khung phần mềm Đại diện AI vào năm 2026

Khám phá 9 khung phần mềm hàng đầu cho trợ lý AI năm 2026, bao gồm CrewAI, AutoGen và LangGraph. Học cách chọn khung phần mềm tốt nhất cho việc phối hợp đa trợ lý và phát triển trợ lý tự động, đồng thời khám phá các công cụ thiết yếu cho tương tác web thực tế.

AI
Logo of CapSolver

Rajinder Singh

26-Jan-2026

Chặn IP vào năm 2026: Cách chúng hoạt động và các cách thực tế để lách lệnh cấm
Cấm IP vào năm 2026: Cách chúng hoạt động và các cách thực tế để vượt qua chúng

Học cách lách chặn IP vào năm 2026 với hướng dẫn toàn diện của chúng tôi. Khám phá các kỹ thuật chặn IP hiện đại và giải pháp thực tế như proxy nhà ở và trình giải CAPTCHA.

web scraping
Logo of CapSolver

Aloísio Vítor

26-Jan-2026

Maxun với tích hợp CapSolver
Cách giải Captcha trong Maxun với tích hợp CapSolver

Một hướng dẫn thực tế về việc tích hợp CapSolver với Maxun cho quét web thực tế. Học cách xử lý reCAPTCHA, Cloudflare Turnstile và các trang web được bảo vệ bằng CAPTCHA bằng cách sử dụng quy trình xác thực trước và luồng công việc robot.

web scraping
Logo of CapSolver

Anh Tuan

21-Jan-2026