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

Emma Foster
Machine Learning Engineer
23-Jan-2025
vi

*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#?

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

Đầ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
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
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:
- Đăng ký Capsolver, lấy khóa API của bạn.
- Sử dụng API để giải quyết CAPTCHA:
csharp
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
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
- Tôn trọng robots.txt: Kiểm tra https://www.scrapethissite.com/robots.txt trước.
- Hạn chế tốc độ: Thêm độ trễ với
Thread.Sleep(2000)để tránh làm quá tải máy chủ. - Xoay vòng User-Agent: Mô phỏng các trình duyệt thực để tránh bị phát hiện.
- Xử lý lỗi: Bao bọc mã trong khối
try-catchđể xử lý sự cố mạng.
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

Tiện ích tốt nhất để giải CAPTCHA 2026 là gì?
Trong thế giới an ninh trực tuyến không ngừng phát triển, các thách thức CAPTCHA đã trở thành rào cản phổ biến đối với người dùng internet...

Ethan Collins
12-Dec-2025

Genlogin: Đổi mới Trải nghiệm Tự động hóa Web
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Genlogin là gì và các dịch vụ mà họ cung cấp.

Rajinder Singh
12-Dec-2025

Proxys.io: Proxy riêng lẻ cho bất kỳ nhiệm vụ nào
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Proxys.io là gì và các dịch vụ mà họ cung cấp.

Lucas Mitchell
12-Dec-2025

Tabproxy: Dịch vụ proxy nhà ở giá trị tốt cho khu vực nước ngoài
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Tabproxy là gì và các dịch vụ mà họ cung cấp.

Anh Tuan
12-Dec-2025

IP2World Proxy Nhà Ở: Giải pháp IP proxy toàn cầu hàng đầu
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn IP2World là gì và các dịch vụ mà họ cung cấp.

Ethan Collins
12-Dec-2025

Các lỗi 402, 403, 404 và 429 là gì trong việc quét web? Hướng dẫn toàn diện
Nắm vững xử lý lỗi quét web bằng cách hiểu các lỗi 402, 403, 404 và 429. Học cách sửa lỗi 403 Cấm, triển khai giải pháp xử lý lỗi 429 và xử lý mã trạng thái 402 Yêu cầu thanh toán mới xuất hiện.

Lucas Mitchell
12-Dec-2025

