Gói nhanh nhẹn Html PDF
Đối với bất kỳ dự án nào lấy nội dung từ trang web bằng C# và phân tích nội dung đó thành định dạng có thể sử dụng được, rất có thể bạn sẽ tìm thấy Gói Agility HTML. Gói Agility là tiêu chuẩn để phân tích cú pháp nội dung HTML trong C#, vì gói này có một số phương thức và thuộc tính hoạt động thuận tiện với DOM. Thay vì viết công cụ phân tích cú pháp của riêng bạn, Gói Agility HTML có mọi thứ bạn cần để tìm các phần tử DOM cụ thể, duyệt qua các nút con và nút cha, đồng thời truy xuất văn bản và thuộc tính (e. g. , liên kết HREF) trong các phần tử được chỉ định Show
Bước đầu tiên là cài đặt Gói Agility HTML sau khi bạn tạo C#. dự án NET. Trong ví dụ này, chúng tôi sử dụng một. ứng dụng web NET Core MVC. Để cài đặt Agility Pack, bạn cần sử dụng NuGet. NuGet có sẵn trong giao diện Visual Studio bằng cách vào Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution. Trong Cửa sổ này, thực hiện tìm kiếm Gói Agility HTML và cài đặt gói đó vào phần phụ thuộc giải pháp của bạn. Sau khi bạn cài đặt nó, bạn sẽ nhận thấy sự phụ thuộc trong giải pháp của mình và bạn sẽ thấy nó được tham chiếu trong các câu lệnh sử dụng của bạn. Nếu bạn không thấy tham chiếu trong câu lệnh sử dụng của mình, bạn phải thêm dòng sau vào mọi tệp mã mà bạn sử dụng Gói Agility
Kéo HTML từ một trang Web bằng Thư viện C# gốcVới phần phụ thuộc Gói Agility được cài đặt, giờ đây bạn có thể thực hành phân tích cú pháp HTML. Đối với hướng dẫn này, chúng tôi sẽ sử dụng Hacker News. Đây là một ví dụ điển hình vì đây là một trang động với danh sách các liên kết phổ biến mà người xem có thể đọc được. Chúng tôi sẽ lấy 10 liên kết hàng đầu trên Hacker News, phân tích cú pháp HTML và đặt nó vào một đối tượng JSON Trước khi cạo một trang, bạn nên hiểu cấu trúc của nó và xem đoạn mã phía sau trang. Điều này có thể được thực hiện trong trình duyệt bằng cách sử dụng tùy chọn “Kiểm tra phần tử”. Chúng tôi đang sử dụng Chrome, nhưng tính năng này có sẵn trong FireFox và Edge. Nhấp chuột phải và kiểm tra phần tử cho liên kết đầu tiên trên Hacker News. Bạn sẽ nhận thấy rằng các liên kết được chứa trong một bảng và mỗi tiêu đề được liệt kê trong một hàng của bảng với các tên lớp cụ thể. Các tên lớp này có thể được sử dụng để kéo nội dung trong mỗi phần tử DOM khi bạn cạo trang
Các phần tử được khoanh tròn trong hình trên hiển thị các lớp có thể được sử dụng để phân tích các phần tử từ phần còn lại của DOM. Lớp tiêu đề chứa các thành phần cho tiêu đề chính hiển thị trên trang và lớp xếp hạng hiển thị thứ hạng của tiêu đề. Các lớp liên kết câu chuyện và điểm số cũng chứa thông tin quan trọng về liên kết mà chúng ta có thể thêm vào đối tượng JSON Chúng tôi cũng muốn nhắm mục tiêu các thuộc tính phần tử DOM cụ thể có chứa thông tin mà chúng tôi cần. Các phần tử 1 và 2 chứa nội dung mà chúng tôi muốn và Gói Agility có thể lấy chúng từ DOM và hiển thị nội dungBây giờ chúng ta đã hiểu cấu trúc DOM của trang, chúng ta có thể viết mã kéo trang chủ cho Hacker News. Trước khi bắt đầu, hãy thêm các câu lệnh sử dụng sau vào mã của bạn
Với các câu lệnh sử dụng tại chỗ, bạn có thể viết một phương thức nhỏ sẽ tự động kéo bất kỳ trang web nào và tải nó vào một biến có tên là 3. Dưới đây là một ví dụ về việc kéo một trang web trong C# bằng các thư viện gốc
Bạn có thể kiểm tra để đảm bảo rằng nội dung trang web đã được kéo bằng cách đặt điểm ngắt và sử dụng Trình hiển thị HTML để xem nội dung
Phân tích cú pháp HTML bằng Agility PackVới HTML đã được tải vào một biến, giờ đây bạn có thể sử dụng Gói Agility để phân tích cú pháp. Bạn có hai lựa chọn chính
LINQ rất hữu ích khi bạn muốn tìm kiếm thông qua các nút để tìm nội dung cụ thể. Tùy chọn XPath dành riêng cho Gói Agility và được hầu hết các nhà phát triển sử dụng để lặp qua một số phần tử. Chúng tôi sẽ sử dụng LINQ để lấy 10 câu chuyện hàng đầu, sau đó XPath để phân tích các phần tử con và nhận các thuộc tính cụ thể cho từng câu chuyện và tải nó vào một đối tượng JSON. Chúng tôi sử dụng đối tượng JSON vì đó là ngôn ngữ chung có thể được sử dụng trên các nền tảng, API và ngôn ngữ lập trình. Hầu hết các hệ thống đều hỗ trợ JSON, vì vậy đây là cách dễ dàng để làm việc với các ứng dụng bên ngoài nếu bạn cần Chúng tôi sẽ tạo một phương thức mới sẽ phân tích cú pháp HTML. Đây là phương thức mới với truy vấn LINQ để lấy tất cả các mục có tên lớp là “athing” và các phần tử con của chúng
Mã này tải HTML vào đối tượng Gói Agility 4. Sử dụng LINQ, chúng tôi đã kéo tất cả các phần tử ____1_______5 trong đó tên lớp chứa 6. Phương thức 7 yêu cầu truy vấn LINQ chỉ lấy top 10 từ danh sách. LINQ giúp việc kéo một số phần tử cụ thể và tải chúng vào một danh sách chung dễ dàng hơn nhiềuChúng tôi không muốn tất cả các yếu tố trong mỗi hàng của bảng, vì vậy chúng tôi cần lặp lại từng mục và sử dụng Gói nhanh nhẹn để chỉ lấy tiêu đề câu chuyện, URL, xếp hạng và điểm số. Chúng tôi sẽ thêm chức năng này vào phương thức 8 vì chức năng mới là một phần của quy trình phân tích cú pháp
9
Đoạn mã trên lặp qua tất cả 10 liên kết hàng đầu trên Hacker News và lấy thông tin mà chúng tôi muốn, nhưng nó không làm gì với thông tin. Bây giờ chúng ta cần tạo một đối tượng JSON để chứa thông tin. Khi chúng tôi có một đối tượng JSON, chúng tôi có thể chuyển đối tượng đó tới bất kỳ thứ gì chúng tôi muốn -- một phương thức khác trong mã của chúng tôi, một API trên nền tảng bên ngoài hoặc tới một ứng dụng khác có thể nhập JSON Cách dễ nhất để tạo một đối tượng JSON là tuần tự hóa nó từ một lớp. Bạn có thể tạo một lớp trong cùng một không gian tên như bạn đã tạo mã của mình trong các ví dụ trước. Chúng ta sẽ tạo một lớp tên là 0để minh họa
Trong ví dụ này, mã chúng ta đang tạo nằm trong không gian tên 1. Không gian tên của bạn có thể khác với không gian tên của chúng tôi, nhưng bạn có thể tìm thấy nó ở đầu tệp của mình trong câu lệnh 2. Tạo lớp 0 trong cùng một tệp mà bạn đang sử dụng cho hướng dẫn này và quay lại phương thức 8 nơi chúng ta sẽ tạo đối tượngGhi chú. Để sử dụng ví dụ hướng dẫn này, bạn cần cài đặt phụ thuộc 5 từ NuGet. Bạn có thể cài đặt nó giống như cách bạn đã cài đặt Agility Pack. Có một số thư viện JSON khác để tuần tự hóa và giải tuần tự hóa các đối tượng, nhưng thư viện Newtonsoft là thư viện phổ biến nhất với các lập trình viên C#. Sau khi bạn cài đặt nó, hãy thêm câu lệnh 2 sau vào mã của bạn
Với lớp 0 đã được tạo, bây giờ chúng ta có thể thêm mã JSON vào phương thức phân tích cú pháp để tạo đối tượng JSON. Hãy xem phương pháp 8 ngay bây giờ
Lưu ý trong đoạn mã trên rằng lớp 0 được điền từ HTML được phân tích cú pháp. Mỗi đối tượng 0 sau đó được thêm vào danh sách chung, danh sách này sẽ chứa tất cả 10 mục. Câu lệnh cuối cùng trước câu lệnh 1 của phương thức là Newtonsoft chuyển danh sách chung thành một đối tượng JSONVậy là xong -- bạn đã lấy 10 liên kết tin tức hàng đầu từ Hacker News và tạo một đối tượng JSON. Đây là mã đầy đủ từ đầu đến cuối với đối tượng JSON cuối cùng có trong biến 2
Lưu ý rằng bạn cũng có thể chọn các nút con từ các nút cha với Gói Agility. HTML Agility Pack sẽ duyệt qua hệ thống phân cấp DOM bằng nhiều phương pháp khác nhau nếu bạn muốn kéo từng phần tử bảng xuống cây DOM Kéo HTML bằng Selenium và Phiên bản trình duyệt ChromeTrong một số trường hợp, bạn sẽ cần sử dụng Selenium với trình duyệt để lấy HTML từ một trang. Điều này là do một số trang web hoạt động với mã phía máy khách để hiển thị kết quả. Vì mã phía máy khách thực thi sau khi trình duyệt tải HTML và tập lệnh, ví dụ trước đó sẽ không nhận được kết quả mà bạn cần. Để mô phỏng việc tải mã trong trình duyệt, bạn có thể sử dụng thư viện có tên Selenium. Selenium cho phép bạn lấy HTML từ một trang bằng tệp thực thi của trình duyệt và sau đó bạn có thể phân tích cú pháp HTML bằng Gói Agility giống như cách chúng tôi đã làm ở trên Trước khi bạn có thể phân tích cú pháp trong trình duyệt, bạn cần cài đặt 3 từ NuGet và thêm câu lệnh 2 vào dự án. Sau khi cài đặt Selenium, hãy thêm các câu lệnh 2 sau vào tệp của bạn
Ghi chú. Bạn phải cập nhật trình điều khiển Selenium khi cập nhật Chrome. Nếu bạn gặp lỗi “SessionNotCreatedException. Thông điệp. phiên không được tạo. Phiên bản ChromeDriver này chỉ hỗ trợ phiên bản Chrome xx” trong đó “xx” là số phiên bản dành cho Chrome, bạn phải cập nhật thư viện Selenium trong dự án của mình Chúng tôi sẽ sử dụng các biến tương tự từ ví dụ trước, nhưng thay đổi mã chính để kéo HTML bằng Selenium và tải nó vào một đối tượng
Lưu ý trong đoạn mã trên rằng cùng một phương thức 8 được sử dụng, nhưng lần này chúng tôi chuyển nguồn trang Selenium làm đối số. Biến 7 trỏ tới tệp thực thi của Chrome nhưng đường dẫn của bạn có thể khác, vì vậy hãy đảm bảo đó là vị trí đường dẫn chính xác trong mã của riêng bạn. Bằng cách sử dụng lại cùng một phương pháp, bạn có thể chuyển đổi giữa tải trực tiếp HTML bằng thư viện C# gốc và tải nội dung phía máy khách và phân tích cú pháp mà không cần viết mã mới cho từng sự kiệnDưới đây là mã đầy đủ để thực hiện yêu cầu và phân tích cú pháp HTML 0Mã này vẫn phân tích cú pháp HTML và chuyển đổi nó thành một đối tượng JSON từ lớp 0, nhưng HTML được phân tích cú pháp sau khi tải nó vào một trình duyệt ảo. Trong ví dụ này, chúng tôi đã sử dụng Headless Chrome với Selenium, nhưng Selenium cũng có trình điều khiển cho FireFox không đầu có sẵn từ NuGetHiện tại, chúng tôi đã sử dụng LINQ và XPath để chọn các lớp CSS, nhưng những người tạo Gói Agility hứa rằng các bộ chọn CSS sẽ ra mắt Suy nghĩ cuối cùngHTML Agility Pack là một công cụ tuyệt vời để quét các trang web, nhưng nó thiếu một số tính năng chính. Ví dụ: chúng tôi cần các thư viện bổ sung (Selenium) để loại bỏ các ứng dụng trang đơn được tạo bằng các khung SPA như React. js, góc cạnh. js hoặc Vue. js XPath cũng rất quan trọng vì ngôn ngữ truy vấn này linh hoạt hơn nhiều so với bộ chọn CSS. Nhìn chung, đó là một thư viện tuyệt vời để phân tích cú pháp HTML, nhưng bạn vẫn cần các thư viện bổ sung để linh hoạt hơn Các ví dụ C# của chúng tôi đã sử dụng Agility Pack và Selenium cho các ứng dụng trang đơn, nhưng bài viết tiếp theo của chúng tôi sẽ tập trung vào ScrapySharp. Bạn cũng có thể đọc hướng dẫn của chúng tôi về quét web bằng C# Jennifer MarshJennifer Marsh là nhà phát triển phần mềm và nhà văn công nghệ cho một số ấn phẩm trong nhiều ngành bao gồm an ninh mạng, lập trình, DevOps và vận hành CNTT Gói linh hoạt HTML có miễn phí không?Html Agility Pack (HAP) là trình phân tích cú pháp HTML mã nguồn mở và miễn phí được viết bằng C# để đọc/ghi DOM và hỗ trợ XPATH hoặc XSLT đơn giản. Nó là một. NET cho phép bạn phân tích các tệp HTML "ngoài web".
Làm cách nào để sử dụng gói nhanh nhẹn HTML trong mạng asp?Ghi chú bên lề. với Visual Studio xử lý NuGet, giờ đây bạn có thể nhấp chuột phải vào "Tài liệu tham khảo" và chọn "Quản lý gói NuGet. ", tìm kiếm "HtmlAgilityPack" và nhấp vào "Cài đặt". Sau đó bắt đầu chơi với mã bằng câu lệnh sử dụng/Nhập
Làm cách nào để chuyển đổi HTML sang PDF trong gấu trúc?Ví dụ. . # nhập mô-đun cần thiết nhập pdfkit # định cấu hình pdfkit để trỏ đến cài đặt wkhtmltopdf của chúng tôi cấu hình = pdfkit. cấu hình (wkhtmltopdf = r"C. \\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf. exe") #chuyển đổi tệp html sang tệp pdf pdfkit. from_file('mẫu. html', 'đầu ra Làm cách nào để tải HTML sang PDF Python?Chuyển đổi HTML/trang web sang PDF . Bước 1. Tải thư viện pdfkit. $ pip cài đặt pdfkit Bước 2. Tải xuống wkhtmltopdf. Đối với Ubuntu/Debian. sudo apt-get cài đặt wkhtmltopdf. Cho cửa sổ. (a) Liên kết tải xuống. WKHTMLTOPDF. . Bước 3. Mã bằng Python để tải xuống. (i) Trang HTML đã lưu. nhập pdfkit |