CAPSOLVER
Blog
Lập trình Web Scraping bằng C#: Hướng dẫn từng bước năm 2025

Truy cập dữ liệu web bằng C#: Hướng dẫn từng bước năm 2025

Logo of CapSolver

Emma Foster

Machine Learning Engineer

23-Jan-2025

vi Copy
![webscraping, csharp, capsolver](https://assets.capsolver.com/prod/posts/webscraping-csharp/uLxRjmKaxoia-d2b5ca33bd970f64a6301fa75ae2eb22.png)

*Hướng dẫn thân thiện của bạn để trích xuất dữ liệu từ trang web, xử lý CAPTCHA và thậm chí chụp ảnh màn hình!*

---

### Tại sao lại trích xuất dữ liệu từ trang web bằng C#?
![](https://assets.capsolver.com/prod/posts/webscraping-csharp/SNthSeOpGxMg-91e3c67d7047376a644698f3aa4c3064.png)


C# không chỉ dùng để xây dựng ứng dụng Windows hoặc trò chơi—nó cũng là một công cụ mạnh mẽ để trích xuất dữ liệu từ trang web! Với các thư viện như **HtmlAgilityPack**, **Selenium**, và **Puppeteer Sharp**, bạn có thể trích xuất dữ liệu, tự động hóa các tương tác và thậm chí giải quyết CAPTCHA (đúng vậy, thật đấy). Trong hướng dẫn này, chúng ta sẽ sử dụng [https://www.scrapethissite.com/pages/](https://www.scrapethissite.com/pages/) làm sân chơi của chúng ta. Hãy bắt đầu nào!

---

### Bước 1: Thiết lập dự án của bạn
![](https://assets.capsolver.com/prod/posts/webscraping-csharp/KmyZsUKZRO0E-d2b5ca33bd970f64a6301fa75ae2eb22.png)


Đầu tiên, tạo một ứng dụng console C# mới. Sau đó, cài đặt các gói NuGet này:
```bash
Install-Package HtmlAgilityPack        # Để phân tích cú pháp HTML
Install-Package Selenium.WebDriver     # Để tự động hóa trình duyệt
Install-Package PuppeteerSharp         # Để chụp ảnh màn hình & trích xuất dữ liệu nâng cao
Install-Package Capsolver.SDK          # Để giải quyết CAPTCHA

Ví dụ 1: Trích xuất dữ liệu trang cơ bản

Hãy trích xuất dữ liệu quốc gia từ https://www.scrapethissite.com/pages/simple/.

csharp Copy
using HtmlAgilityPack;
using System.Net;

var url = "https://www.scrapethissite.com/pages/simple/";
var client = new WebClient();
client.Headers.Add("User-Agent", "Mozilla/5.0"); // Hãy lịch sự!
var html = client.DownloadString(url);

var doc = new HtmlDocument();
doc.LoadHtml(html);

var countries = doc.DocumentNode.SelectNodes("//div[@class='country']");
foreach (var country in countries)
{
    var name = country.SelectSingleNode(".//h3").InnerText.Trim();
    var capital = country.SelectSingleNode(".//span[@class='country-capital']").InnerText.Trim();
    Console.WriteLine($"Quốc gia: {name}, Thủ đô: {capital}");
}

Điều này in tất cả các quốc gia và thủ đô của chúng. Đơn giản, phải không?


Ví dụ 2: Xử lý JavaScript với Selenium

Một số trang cần một trình duyệt thực sự. Hãy trích xuất dữ liệu trang ví dụ AJAX bằng Selenium:

csharp Copy
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

var options = new ChromeOptions();
options.AddArgument("--headless"); // Chạy nền
using var driver = new ChromeDriver(options);

driver.Navigate().GoToUrl("https://www.scrapethissite.com/pages/ajax-javascript/");
var dynamicContent = driver.FindElement(By.CssSelector(".ajax-content")).Text;
Console.WriteLine($"Nội dung AJAX: {dynamicContent}");

Ví dụ 3: Giải quyết CAPTCHA với Capsolver

Có CAPTCHA chặn đường bạn không? Sử dụng Capsolver để bỏ qua ReCaptchaV2. Đây là cách:

  1. Đăng ký Capsolver, lấy khóa API của bạn.
  2. Sử dụng API để giải quyết CAPTCHA:
csharp Copy
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text;
using System.Text.Json;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Threading;

namespace CapSolverSeleniumExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string token = await GetCaptchaToken();
            using var driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://www.example.com");
            Thread.Sleep(5000);
            driver.ExecuteScript("document.getElementById('g-recaptcha-response').innerHTML = arguments[0];", token);
            var submitButton = driver.FindElement(By.Id("submit-button"));
            submitButton.Click();
            Thread.Sleep(5000);
            driver.Quit();
        }

        static async Task<string> GetCaptchaToken()
        {
            string apiKey = "YOUR_API_KEY";
            string siteKey = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-";
            string siteUrl = "https://www.example.com";
            using var client = new HttpClient();
            var payload = new
            {
                clientKey = apiKey,
                task = new
                {
                    type = "ReCaptchaV3TaskProxyLess",
                    websiteKey = siteKey,
                    websiteURL = siteUrl,
                    pageAction = "login"
                }
            };
            var requestContent = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
            var createTaskResponse = await client.PostAsync("https://api.capsolver.com/createTask", requestContent);
            var createTaskResponseString = await createTaskResponse.Content.ReadAsStringAsync();
            using var createTaskJsonDoc = JsonDocument.Parse(createTaskResponseString);
            var root = createTaskJsonDoc.RootElement;
            if (!root.TryGetProperty("taskId", out var taskIdElement))
            {
                Console.WriteLine("Không thể tạo tác vụ: " + createTaskResponseString);
                return null;
            }
            int taskId = taskIdElement.GetInt32();
            while (true)
            {
                await Task.Delay(1000);
                var resultPayload = new { clientKey = apiKey, taskId = taskId };
                var resultContent = new StringContent(JsonSerializer.Serialize(resultPayload), Encoding.UTF8, "application/json");
                var getTaskResponse = await client.PostAsync("https://api.capsolver.com/getTaskResult", resultContent);
                var getTaskResponseString = await getTaskResponse.Content.ReadAsStringAsync();
                using var getTaskJsonDoc = JsonDocument.Parse(getTaskResponseString);
                var resultRoot = getTaskJsonDoc.RootElement;
                if (resultRoot.TryGetProperty("status", out var statusElement))
                {
                    string status = statusElement.GetString();
                    if (status == "ready")
                    {
                        if (resultRoot.TryGetProperty("solution", out var solutionElement) && solutionElement.TryGetProperty("gRecaptchaResponse", out var tokenElement))
                        {
                            return tokenElement.GetString();
                        }
                        return null;
                    }
                    if (status == "failed" || resultRoot.TryGetProperty("errorId", out _))
                    {
                        Console.WriteLine("Giải quyết thất bại! phản hồi: " + getTaskResponseString);
                        return null;
                    }
                }
            }
        }
    }
}

Hoạt động liền mạch với Selenium để tự động hóa các biểu mẫu có nhiều CAPTCHA!


Ví dụ 4: Chụp ảnh màn hình với Puppeteer Sharp

Bạn muốn bằng chứng trực quan về việc trích xuất dữ liệu của mình? Chụp ảnh màn hình:

csharp Copy
using PuppeteerSharp;

await new BrowserFetcher().DownloadAsync();
using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
using var page = await browser.NewPageAsync();

await page.GoToAsync("https://www.scrapethissite.com/pages/javascript/");
await page.ScreenshotAsync("screenshot.png");

Hoàn hảo để gỡ lỗi hoặc lưu trữ các trang.


Mẹo chuyên nghiệp để trích xuất dữ liệu trang web năm 2025

  1. Tôn trọng robots.txt: Kiểm tra https://www.scrapethissite.com/robots.txt trước.
  2. Hạn chế tốc độ: Thêm độ trễ với Thread.Sleep(2000) để tránh làm quá tải máy chủ.
  3. Xoay vòng User-Agent: Mô phỏng các trình duyệt thực để tránh bị phát hiện.
  4. Xử lý lỗi: Bao bọc mã trong khối try-catch để xử lý sự cố mạng.

Copy

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ác User Agent Tốt Nhất để Scrape Web & Cách Sử Dụng Chúng
Các User Agent Tốt Nhất để Scrape Web & Cách Sử Dụng Chúng

Hướng dẫn về các user agent tốt nhất để scrape web và cách sử dụng hiệu quả để tránh bị phát hiện. Khám phá tầm quan trọng của user agent, các loại và cách triển khai chúng để scrape web liền mạch và không bị phát hiện.

Logo of CapSolver

Anh Tuan

07-Mar-2025

Cách giải quyết thử thách Cloudflare JS để thu thập dữ liệu web và tự động hóa
Cách giải quyết thử thách Cloudflare JS để thu thập dữ liệu web và tự động hóa

Tìm hiểu cách giải quyết thử thách JavaScript của Cloudflare để thu thập dữ liệu web và tự động hóa liền mạch. Khám phá các chiến lược hiệu quả, bao gồm sử dụng trình duyệt không đầu, luân phiên proxy, và tận dụng khả năng giải quyết CAPTCHA nâng cao của CapSolver.

Cloudflare
Logo of CapSolver

Anh Tuan

05-Mar-2025

Dấu vân tay TLS của Cloudflare: Nó là gì và cách giải quyết
Dấu vân tay TLS của Cloudflare: Nó là gì và cách giải quyết

Tìm hiểu về việc Cloudflare sử dụng dấu vân tay TLS để bảo mật, cách nó phát hiện và chặn bot, và khám phá các phương pháp hiệu quả để giải quyết vấn đề này cho các tác vụ thu thập dữ liệu web và duyệt web tự động.

Cloudflare
Logo of CapSolver

Anh Tuan

28-Feb-2025

Tại sao tôi cứ bị yêu cầu xác minh rằng tôi không phải là người máy?
Tại sao tôi cứ bị yêu cầu xác minh rằng tôi không phải là người máy?

Tìm hiểu lý do tại sao Google yêu cầu bạn xác minh rằng bạn không phải là robot và khám phá các giải pháp như sử dụng API của CapSolver để giải quyết các thử thách CAPTCHA một cách hiệu quả.

Logo of CapSolver

Anh Tuan

27-Feb-2025

Cách trích xuất dữ liệu từ trang web được bảo vệ bởi Cloudflare
Cách trích xuất dữ liệu từ trang web được bảo vệ bởi Cloudflare

Trong hướng dẫn này, chúng ta sẽ khám phá các kỹ thuật đạo đức và hiệu quả để trích xuất dữ liệu từ các trang web được bảo vệ bởi Cloudflare.

Cloudflare
Logo of CapSolver

Anh Tuan

20-Feb-2025

Tại sao các trang web lại nghĩ tôi là bot? Và cách giải quyết chúng
Tại sao các trang web lại nghĩ tôi là bot? Và cách giải quyết chúng

Hiểu tại sao các trang web đánh dấu bạn là bot và cách tránh bị phát hiện. Các tác nhân chính bao gồm các thử thách CAPTCHA, IP đáng ngờ và hành vi trình duyệt bất thường.

Logo of CapSolver

Anh Tuan

20-Feb-2025