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

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.

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
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.

Anh Tuan
05-Mar-2025

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.

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ì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ả.

Anh Tuan
27-Feb-2025

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.

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
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.

Anh Tuan
20-Feb-2025