C# Hướng Dẫn Thu Thập Dữ Liệu Web: Cách Thu Thập Dữ Liệu Web Công Khai
TL;DR
Việc thu thập dữ liệu web bằng C# thường kết hợp HttpClient để lấy dữ liệu với một trình phân tích như AngleSharp để trích xuất HTML.
Sử dụng tự động hóa trình duyệt khi nội dung yêu cầu chỉ xuất hiện sau khi thực thi JavaScript hoặc một tương tác được phê duyệt.
Tái sử dụng kết nối HTTP, đặt giới hạn thời gian phản hồi, và từ chối nội dung không mong muốn trước khi phân tích các trường dữ liệu.
Xác thực danh tính bản ghi, số lượng trường, định dạng số và các giá trị thiếu riêng biệt với thành công HTTP.
Một API thu thập quản lý có thể cung cấp cho một pipeline .NET mà không cần SDK C# gốc.
Nstdata Crawl cung cấp đầu ra trang chuẩn bị cho LLM, phát hiện giới hạn, kết xuất, và định tuyến tích hợp; dịch vụ .NET của bạn vẫn sở hữu sự chấp nhận từ doanh nghiệp.
Web Scraping với C# Hoạt Động Như Thế Nào?
Web scraping với C# hoạt động bằng cách lấy một trang đã được phê duyệt, phân tích nội dung của nó, chọn các phần tử cần thiết và xác thực các bản ghi kết quả. Điểm khởi đầu bình thường là HttpClient cộng với một trình phân tích HTML. Nếu HTML ban đầu không chứa các thông tin, có thể cần một dịch vụ kết xuất trình duyệt hoặc đã quản lý. Một hướng dẫn thu thập dữ liệu web C# nên làm rõ sự phân biệt đó trước khi thêm phụ thuộc tự động hóa.
C# rất hữu ích khi người thu thập cần sống bên cạnh các API .NET hiện có, dịch vụ nền, các mô hình miền kiểu và công cụ vận hành. Các kiểu tĩnh giúp bày tỏ một hợp đồng, nhưng một số lượng được kiểu chính xác vẫn có thể thuộc về sản phẩm sai. Kiểm tra danh tính nguồn và ý nghĩa kinh doanh trước khi ghi bản ghi xuống phía dưới.
Nstdata Crawl là một lựa chọn khi nhóm .NET của bạn muốn tiêu thụ nội dung thu thập được thay vì vận hành trình duyệt và lớp proxy. Giữ tách biệt kiểm tra thu thập và miền để bất kỳ triển khai nào cũng có thể thay thế mà không cần định nghĩa lại những gì cấu thành một bản ghi được chấp nhận.
Bạn Cần Gì Trước Khi Bắt Đầu?
Chuẩn bị một SDK .NET được hỗ trợ, một thư mục dự án, một nguồn kiểm tra đã được phê duyệt và một sơ đồ bản ghi rõ ràng. Phương pháp trang tĩnh bên dưới đã được chạy với SDK .NET 10.0.404 và AngleSharp 1.10.2 trên một trang kiểm tra bảng HTML công khai. Hãy coi đó là các phiên bản đã thử nghiệm thay vì một tuyên bố rằng các cài đặt trong tương lai giải quyết cùng các gói đó.
Trải nghiệm Nstproxy Crawl - Bắt Đầu Dùng Thử Miễn Phí Hôm Nay
Hợp đồng bảng đơn giản: một tên không trống và một số lượng thập phân cho mỗi hàng, với các tên duy nhất trong phần trình diễn này. Cài đặt SDK từ phân phối được hỗ trợ của Microsoft. Tạo một dự án console với dotnet new console -n TableCollector, chuyển vào thư mục đó và thêm trình phân tích đã thử nghiệm với dotnet add package AngleSharp --version 1.10.2.
Đối với tự động hóa trình duyệt, một gói Playwright và các nhị phân trình duyệt của nó là các yêu cầu riêng biệt. Đối với phương pháp đã quản lý, bạn cũng cần một tài khoản Nstdata, một khóa API, Python 3.10 hoặc phiên bản mới hơn cho công nhân đã được minh họa, và sự phê duyệt cho URL mục tiêu. Không để bất kỳ thông tin xác thực thật nào trong tệp nguồn, nhật ký ứng dụng, hoặc kho lưu trữ.
Bạn Nên Chọn Giữa Ba Phương Pháp Như Thế Nào?
Chọn HTTP trực tiếp cho HTML ban đầu hữu ích, một trình duyệt cho nội dung phụ thuộc vào JavaScript có thể quan sát, và thu thập đã quản lý khi việc vận hành cơ sở hạ tầng đó là rào cản.
Phương pháp
Hữu ích khi
Bạn vận hành
Kiểm tra chấp nhận chính
HttpClient + AngleSharp
Các trường cần thiết tồn tại trong HTML trả về
Lấy dữ liệu, phân tích, lập lịch
Ngữ nghĩa bảng và trường chính xác
Playwright .NET
Nội dung yêu cầu kết xuất hoặc tương tác
Vòng đời trình duyệt và khai thác
Một điều kiện sẵn sàng có ý nghĩa
Nstdata Crawl worker
Bạn muốn một ranh giới thu thập API
Phân tích miền và quy trình làm việc phía dưới
Thành công nhiệm vụ và nội dung nguồn có thể sử dụng
So sánh C# và Python xem xét sự đánh đổi giữa các hệ sinh thái. Việc thay đổi ngôn ngữ hoặc thêm một trình duyệt không khắc phục định nghĩa bản ghi không chính xác.
Làm Thế Nào Để Bạn Thu Thập Dữ Liệu Từ Một Trang HTML?
Thu thập HTML tĩnh với một yêu cầu HttpClient có giới hạn và trích xuất các trường với một trình phân tích DOM. Đừng phân tích HTML tùy ý với một biểu thức chính quy hoặc coi một kết quả trống là một lần làm mới thành công.
Phương pháp 1: HttpClient và AngleSharp
Bước 1: Thêm chương trình trích xuất
Thay thế Program.cs của dự án bằng mã sau. Nó yêu cầu một trang trình diễn công khai, giới hạn phản hồi đệm, xác minh HTML, và trích xuất một bảng đã biết. Hướng dẫn trình phân tích AngleSharp tài liệu mô hình lựa chọn trình phân tích và DOM.
usingSystem.Globalization;usingSystem.Text.Json;usingAngleSharp.Html.Parser;conststring url ="https://testpages.eviltester.com/pages/basics/html-tag-table/";usingvar handler =newHttpClientHandler{ AllowAutoRedirect =false};usingvar client =newHttpClient(handler){ Timeout = TimeSpan.FromSeconds(30), MaxResponseContentBufferSize =1_048_576};usingvar response =await client.GetAsync(url);response.EnsureSuccessStatusCode();
```csharp
if(response.Content.Headers.ContentType?.MediaType !="text/html")thrownewInvalidOperationException("Mong đợi HTML");var html =await response.Content.ReadAsStringAsync();var document =awaitnewHtmlParser().ParseDocumentAsync(html);var table = document.QuerySelector("table#mytable")??thrownewInvalidOperationException("Bảng mong đợi đang bị thiếu");var records =newList<object>();var seen =newHashSet<string>();foreach(var row in table.QuerySelectorAll("tr")){var cells = row.QuerySelectorAll("td");if(cells.Length ==0)continue;if(cells.Length !=2)thrownewInvalidOperationException("Chiều rộng hàng không mong đợi");var name = cells[0].TextContent.Trim();var amount =decimal.Parse(cells[1].TextContent.Trim(), CultureInfo.InvariantCulture);if(name.Length ==0||!seen.Add(name))thrownewInvalidOperationException("Danh tính trống hoặc trùng lặp"); records.Add(new{ name, amount });}if(records.Count ==0)thrownewInvalidOperationException("Không có bản ghi");Console.WriteLine(JsonSerializer.Serialize(records));
Bước 2: Chạy bộ thu thập
Chạy dotnet run từ thư mục dự án. Trang đã kiểm tra trả về bốn hàng, với tên Alan, Bob, Aleister, và Douglas và số tiền 12, 23, 33.3, và 42. JSON chứa các số tiền số vì ví dụ này tuần tự hóa giá trị thập phân C#.
Bước 3: Kiểm tra hợp đồng nguồn
So sánh những giá trị đó với bảng nguồn trước khi thay đổi bộ chọn cho một trang khác. Đối với nguồn của riêng bạn, xác định định danh thực tế, địa phương số, đơn vị, và chính sách giá trị thiếu. Một ký hiệu tiền tệ, dấu phân cách hàng nghìn, hoặc dấu phân cách thập phân địa phương cần phải được phân tích có chủ ý thay vì một cuộc gọi decimal.Parse không có điều kiện.
Bản trình diễn tạo và giải phóng một khách hàng cho một lần chạy ngắn. Một dịch vụ chạy lâu nên tuân theo hướng dẫn về vòng đời HttpClient của Microsoft, bao gồm việc tái sử dụng kết nối và hành vi DNS phù hợp. Tránh tạo một bể kết nối mới cho mỗi URL trong một công việc lớn.
Làm Thế Nào Để Bạn Xử Lý Nội Dung Xuất Hiện Sau Khi JavaScript Chạy?
Xử lý nội dung phụ thuộc vào JavaScript bằng cách chờ trạng thái cụ thể chứng minh dữ liệu yêu cầu đã sẵn sàng. Việc khởi động trình duyệt và điều hướng trang không đủ để chứng minh rằng các trường kinh doanh đã được tải.
Phương pháp 2: Playwright .NET
Bước 1: Cài đặt phụ thuộc trình duyệt
Tạo một dự án console .NET 10 riêng biệt với dotnet new console -n RenderCheck, chuyển vào thư mục của nó và chạy dotnet add package Microsoft.Playwright --version 1.64.1. Hướng dẫn hướng dẫn cài đặt Playwright .NET giải thích lý do gói và nhị phân trình duyệt là các phụ thuộc riêng biệt.
Bước 2: Chạy kiểm tra kết xuất có kiểm soát
Sử dụng chương trình này để chứng minh rằng trình duyệt đã cài đặt của bạn có thể thực thi một kịch bản trì hoãn và thỏa mãn một khẳng định có ý nghĩa. Đây là một trang HTML kiểm soát, không phải là một khẳng định về quyền truy cập vào một trang web động bên ngoài. Lưu chương trình dưới dạng Program.cs, chạy dotnet run -- --install để gọi trình cài đặt trình duyệt của gói, và sau đó chạy dotnet run để thực hiện kiểm tra.
Bước 3: Điều chỉnh thời gian chờ đến nguồn được phê duyệt
Đối với một nguồn thực tế, điều hướng đến URL đã được phê duyệt với page.GotoAsync, sau đó thay thế khẳng định lắp ghép với bộ chọn cụ thể cho nguồn và trạng thái mong đợi. Xác minh một danh tính hoặc trường yêu cầu, không chỉ đơn thuần là sự hiện diện của một phần tử body chung chung. Giải phóng các bối cảnh khi công việc hoàn tất và giới hạn số lượng các trang đang hoạt động đồng thời.
Nếu đầu ra trống, kiểm tra xem trang có phải là lời nhắc đăng nhập, trang đồng ý, trang lỗi, hoặc trạng thái ứng dụng chưa hoàn thành hay không. Hướng dẫn Playwright thực hành cung cấp một quy trình làm việc của trình duyệt đầy đủ hơn. Việc chờ thêm không thể giải quyết một sự từ chối quyền hoặc một bộ chọn nhắm vào tài liệu sai.
Nstdata Crawl có thể cung cấp quy trình làm việc dữ liệu .NET như thế nào?
Nstdata Crawl có thể cung cấp một quy trình làm việc .NET thông qua một công nhân thu thập trả về các hiện vật trang đã được xem xét. Nstdata Crawl là một API thu thập dữ liệu web cho dữ liệu sẵn sàng cho LLM có thể biến các phần trang web đã được phê duyệt thành các đầu vào có thể tái sử dụng. Khám phá trang web và thu thập lặp lại hỗ trợ một kho nguồn có giới hạn. Việc trình bày JavaScript có thể lấy nội dung động trước khi chuyển đổi. Ứng dụng .NET của bạn có thể tiêu thụ các hiện vật và giữ quyền sở hữu các bản ghi đã gõ, giải quyết danh tính và xác thực kinh doanh.
Định dạng cho các người tiêu dùng riêng biệt: Markdown hỗ trợ RAG và đại lý, HTML hỗ trợ phân tích DOM, liên kết hỗ trợ khám phá, và PDF hoặc ảnh chụp màn hình hỗ trợ kiểm tra. Các phản hồi hướng JSON là cấu trúc tích hợp, không phải là bằng chứng cho việc một lược đồ miền là chính xác.
Truy cập proxy tích hợp sẵn: Các cuộc gọi quản lý tiêu chuẩn thừa hưởng định tuyến Nstdata mà không cần cấu hình thêm Host, Port, Username, Password hoặc Protocol proxy. Xem xét lưu lượng proxy tách biệt khỏi việc sử dụng URL trong mô hình lập hóa đơn Crawl.
Thu thập thông minh theo tác vụ: Kiểm tra việc hoàn thành, thành công, đầu ra thiếu và nội dung một phần trước khi chuyển một tệp hoặc lô bản ghi cho dịch vụ .NET. Lưu giữ danh tính tác vụ cho công việc không đồng bộ thay vì nộp lại sau một phản hồi không chắc chắn.
Phương pháp 3: Sử dụng một công nhân thu thập quản lý
Bước 1: Cấu hình thông tin xác thực của công nhân
Lấy khóa API của bạn thông qua Dashboard → Crawl Playground, cài đặt nstdata-ai-crawl với Python 3.10 hoặc phiên bản mới hơn, và thiết lập NSTDATA_API_TOKEN cùng APPROVED_PAGE_URL. Thiết lập EXPECTED_TEXT khi một cụm từ nguồn yêu cầu có thể cung cấp một kiểm tra chấp nhận đầu tiên hữu ích.
Bước 2: Thực hiện công nhân thu thập
Lưu đoạn mã sau với tên nstdata_worker.py. Cuộc gọi phụ thuộc vào thông tin xác thực này cần có khóa của riêng bạn và một mục tiêu đã được phê duyệt; hướng dẫn không tuyên bố một quy trình chiết xuất sản xuất xác thực hoặc một SDK C# bản địa.
[Ảnh chụp màn hình: Nstdata Crawl Playground với mục tiêu đã được phê duyệt và định dạng được yêu cầu; giữ khóa API ẩn.]
import os
from pathlib import Path
from nstdata_ai_crawl import NstDataClient, ScrapeRequestDto
with NstDataClient(os.environ["NSTDATA_API_TOKEN"], max_response_bytes=1_048_576)as client: result = client.submit_scrape_task_sync(ScrapeRequestDto( url=os.environ["APPROVED_PAGE_URL"], formats=["markdown"], onlyMainContent=True, timeout=60000,))if result.success isnotTrueor result.status !="completed":raise RuntimeError("Việc thu thập không hoàn thành thành công")if result.data isNoneor result.data.truncated isTrue:raise RuntimeError("Nội dung thiếu hoặc một phần cần được xem xét") text = result.data.get_markdown()ifnot text ornot text.strip():raise RuntimeError("Không có Markdown sử dụng được trả về") expected = os.environ.get("EXPECTED_TEXT")if expected and expected notin text:raise RuntimeError("Văn bản nguồn yêu cầu đang thiếu") Path("accepted-page.md").write_text(text, encoding="utf-8")print("Đã lưu accepted-page.md; xác minh thông tin trước khi nhập")
Bước 3: Chuyển nội dung đã chấp nhận cho .NET
Hãy để trình chạy công việc của bạn chuyển accepted-page.md cùng với siêu dữ liệu nguồn của nó cho người tiêu dùng .NET sau khi công nhân thành công. Một tệp là đủ cho một buổi trình diễn địa phương nhỏ; các dịch vụ định kỳ nên sử dụng một hàng đợi hoặc hợp đồng lưu trữ rõ ràng. Nếu người tiêu dùng hạ nguồn yêu cầu các trường bảng, hãy yêu cầu một đại diện HTML phù hợp và áp dụng một parser miền đã được kiểm tra thay vì coi Markdown là một bảng đã hoàn thành.
Giữ các đầu ra bị từ chối ra khỏi tập dữ liệu đang hoạt động. Hướng dẫn thu thập lô giải thích lý do tại sao các trang đã nộp và các trang đã chấp nhận nên có số lượng riêng biệt.
Những lỗi nào mà một trình thu thập C# sản xuất nên xử lý?
Một trình thu thập C# sản xuất nên phân biệt các lỗi vận chuyển, nội dung, chiết xuất và chấp nhận. Ghi lại một yêu cầu hoặc ID tác vụ không bí mật, URL đã được phê duyệt, số lượt thử, giai đoạn và lý do để một người điều hành có thể xác định giới hạn đang gặp lỗi.
Triệu chứng
Nguyên nhân có thể
Phản ứng
Thành công HTTP không có bảng
Đã thay đổi markup hoặc loại trang sai
Kiểm tra HTML đã giữ lại và từ chối làm mới
Ngoại lệ phân tích số thập phân
Địa phương, đơn vị, hoặc ô nhiễm trường
Chuẩn hóa theo hợp đồng nguồn
Thời gian chờ trình duyệt
Điều kiện sẵn sàng sai hoặc dữ liệu không có sẵn
Nắm bắt một hiện vật xem xét và kiểm tra trạng thái
Dòng lặp bị lặp lại
Sai sót phân trang hoặc danh tính
Đối chiếu danh tính trước khi lưu trữ
Nhiệm vụ quản lý còn thiếu
Công việc từ xa chậm hoặc thất bại
Truy vấn ID tác vụ đã lưu trong chính sách polling có giới hạn
Thử lại các lỗi tạm thời với chính sách giới hạn và lưu giữ tập dữ liệu đã được chấp nhận cuối cùng. Không thử lại một sự từ chối có chủ đích vô thời hạn. Đối với một nguồn mới, bắt đầu với một trang và xác thực hành vi trước khi thêm lịch trình, song song, hoặc phát hiện đệ quy.
Bạn Nên Xây Dựng Gì Đầu Tiên Trong .NET?
Xây dựng một pipeline ghi nhận đã kiểm tra với HTTP trực tiếp trước khi thêm trình duyệt hoặc thu thập có quản lý. Đo lường giai đoạn nào thực sự hạn chế độ chính xác và bảo trì, sau đó chọn cơ sở hạ tầng bổ sung để giải quyết vấn đề đó. Đầu ra HTML và hình ảnh thay thế của Nstdata có thể giúp điều tra việc thu nhận thất bại mà không thay đổi hợp đồng miền .NET của bạn.
Hỏi: C# có cần Selenium cho mọi trình thu thập web không?
Không. HttpClient và một bộ phân tích HTML là đủ khi nội dung cần thiết có trong phản hồi ban đầu.
Hỏi: AngleSharp có tự động hiển thị một ứng dụng JavaScript tùy ý không?
Bộ phân tích HTML được sử dụng ở đây không tái tạo một ứng dụng trình duyệt đầy đủ. Sử dụng một phương pháp hiển thị phù hợp khi các sự kiện cần thiết phụ thuộc vào JavaScript.
Hỏi: Tại sao sử dụng số thập phân cho số lượng mẫu?
Số thập phân tránh việc làm tròn hàng nhị phân cho hợp đồng số đơn giản này, nhưng việc phân tích vẫn cần đúng ngôn ngữ nguồn và đơn vị.
Hỏi: Ví dụ trình duyệt có thu thập một trang web từ xa không?
Không. Nó xác minh việc thực thi trình duyệt đã cài đặt và một khẳng định khả năng sẵn sàng chậm trên một thiết bị kiểm soát trước khi bạn điều chỉnh nó cho một nguồn đã được phê duyệt.
Hỏi: Phương pháp có quản lý có cần SDK C# không?
Không. Công nhân đã trình bày sử dụng SDK Python đã được xác minh và truyền các mảnh chấp nhận cho người tiêu dùng .NET thông qua một ranh giới quy trình rõ ràng.
Ivy Lin
Nov. 12th 2026
Thu thập toàn bộ trang web chỉ với một yêu cầu API
Tỷ lệ thành công 99,8% với kết xuất JavaScript
Nhận dữ liệu sạch, sẵn sàng cho LLM ở nhiều định dạng
Chuyển mọi trang web thành Markdown, HTML, JSON, liên kết, PDF và hơn thế nữa mà không cần quản lý hạ tầng thu thập dữ liệu.