Thư viện Swift miễn phí để phân tích và thao tác dữ liệu HTML
Thư viện Swift mã nguồn mở cho việc phân tích HTML/XML, cung cấp một API Swift sạch sẽ để phân tích và duyệt tài liệu HTML và XML một cách dễ dàng.
Kanna là gì?
Nếu bạn từng xây dựng một ứng dụng Swift cần trích xuất dữ liệu từ các trang web, phân tích phản hồi API ở định dạng XML, hoặc thu thập nội dung có cấu trúc, bạn chắc hẳn đã gặp khó khăn khi làm việc với các chuỗi HTML và XML thô. Thư viện chuẩn của Swift không bao gồm một bộ phân tích cú pháp gốc, dễ sử dụng cho các định dạng này, và đây là lúc Kanna xuất hiện để giải quyết vấn đề. Về cơ bản, Kanna cung cấp một API Swift sạch sẽ để phân tích và duyệt tài liệu HTML và XML. Bên trong, nó giao việc nặng nề cho libxml2, nghĩa là bạn nhận được hiệu năng phân tích cực kỳ ổn định mà không cần tự triển khai lại các quy tắc ngữ pháp phức tạp.
Kanna nổi bật trong hệ sinh thái Swift nhờ tính đơn giản và mạnh mẽ. Với API trực quan, bạn có thể duyệt và thao tác các tài liệu HTML/XML bằng các phương pháp truy vấn quen thuộc như XPath 1.0 và bộ chọn CSS3. Dù bạn đang xây dựng một công cụ thu thập dữ liệu web, trích xuất dữ liệu từ các nguồn RSS, hay xử lý các tệp cấu hình XML, Kanna cung cấp những công cụ cần thiết. Hỗ trợ đa nền tảng là một trong những ưu điểm hấp dẫn nhất của Kanna. Nó chạy trên macOS, iOS, tvOS, watchOS và thậm chí Linux. XPath 1.0 và bộ chọn CSS3 mang lại cho bạn hai cách mạnh mẽ, tiêu chuẩn công nghiệp để truy vấn tài liệu. Việc hỗ trợ đồng thời cả bộ chọn CSS3 và XPath 1.0 khiến nó linh hoạt đủ để xử lý mọi thứ từ việc trích xuất HTML đơn giản đến xử lý XML có không gian tên phức tạp. Dù bạn đang xây dựng một ứng dụng iOS tiêu thụ nguồn RSS, một máy chủ Vapor thu thập giá cả đối thủ, hay một công cụ dòng lệnh chuyển đổi dữ liệu XML, Kanna cung cấp các công cụ để hoàn thành công việc một cách đáng tin cậy và tinh tế.
Bắt đầu với Kanna
Cách khuyến nghị và dễ nhất để cài đặt Kanna là sử dụng CocoaPods. Vui lòng sử dụng lệnh sau để cài đặt một cách suôn sẻ.
Cài đặt Kanna qua Carthage
// add the following line to your Podfile:
use_frameworks!
pod 'Kanna', '~> 5.2.2'
// Then run:
$ pod install
Cài đặt Kanna qua CocoaPods
// If you prefer Carthage, add this line to your Cartfile:
github "tid-kijyun/Kanna" ~> 5.2.2
Bạn cũng có thể cài đặt thủ công; tải xuống các tệp phát hành mới nhất trực tiếp từ kho GitHub.
Phân tích tài liệu HTML bằng Swift
Thư viện mã nguồn mở Kanna đã bao gồm hỗ trợ tải và phân tích tài liệu HTML trong các ứng dụng Swift. Trường hợp sử dụng phổ biến nhất cho việc phân tích HTML này là khi tài liệu được tải xuống từ web hoặc được tạo ra bằng chương trình. Dưới đây là một ví dụ đơn giản cho thấy các nhà phát triển phần mềm có thể sử dụng hàm HTML nhận một chuỗi HTML thô, mã hoá nó và trả về một đối tượng tài liệu chứa các thuộc tính như .title và .body, giúp họ truy cập nhanh vào các phần tử phổ biến mà không cần selector.
Cách phân tích HTML bằng mã hóa UTF-8 qua Thư viện Swift?
import Kanna
// A sample HTML string representing a webpage
let htmlString = """
My Tech Blog
Chào mừng đến với Swift Parsing
Kanna làm cho việc phân tích HTML trở nên dễ dàng và tinh tế.
View on GitHub
"""
// Parse the HTML string using UTF-8 encoding
if let doc = try? HTML(html: htmlString, encoding: .utf8) {
// Access the document title directly via a convenience property
print(doc.title ?? "No title found")
// Output: My Tech Blog
// Access the full body text
print(doc.body?.text ?? "No body")
}
Hỗ trợ truy vấn bộ chọn CSS3
Thư viện Kanna đã bao gồm hỗ trợ đầy đủ cho CSS3 Selector, cho phép các nhà phát triển sử dụng cú pháp CSS quen thuộc để tìm các phần tử. Hỗ trợ selector CSS của Kanna cho phép bạn sử dụng cùng một cú pháp selector mà bạn có thể viết trong một stylesheet hoặc trong JavaScript's querySelectorAll. Điều này làm cho nó rất trực quan đối với bất kỳ ai có nền tảng phát triển web. Ví dụ sau đây cho thấy cách người dùng có thể chọn các phần tử HTML và lặp lại trên nhiều phần tử trong các ứng dụng Swift.
Cách chọn nhiều phần tử HTML & trích xuất văn bản từ chúng qua Thư viện Swift?
import Kanna
let htmlString = """
-
Sách Swift
$39.99
-
Hướng dẫn Xcode
$24.99
-
Kiến thức cơ bản iOS
$49.99
"""
if let doc = try? HTML(html: htmlString, encoding: .utf8) {
// Select all elements with class "product" inside a "ul"
for product in doc.css("ul.product-list li.product") {
// Extract text from nested span elements using child selectors
let name = product.css("span.name").first?.text ?? "Unknown"
let price = product.css("span.price").first?.text ?? "N/A"
// Access HTML attributes using subscript notation
let productId = product["data-id"] ?? "No ID"
print("[\(productId)] \(name) — \(price)")
}
}
Hỗ trợ truy vấn XPath 1.0
Thư viện Kanna đã bao gồm hỗ trợ truy vấn XPath 1.0 trong các ứng dụng Swift. XPath cung cấp một cách mạnh mẽ và linh hoạt hơn để điều hướng qua các phần tử và thuộc tính trong tài liệu XML/HTML. Nó đặc biệt hữu ích cho các cấu trúc tài liệu phức tạp. Các biểu thức XPath có thể duyệt tài liệu theo những cách mà các selector CSS không thể, chẳng hạn như tìm các phần tử dựa trên vị trí, quan hệ cha-con, hoặc khớp văn bản phức tạp. Nó không thể thiếu cho việc phân tích XML và thu thập HTML phức tạp.
Phân tích và xác thực XML bằng Swift
Không chỉ dừng lại ở việc phân tích HTML cơ bản, thư viện mã nguồn mở Kanna còn cung cấp khả năng xử lý XML mạnh mẽ. Điều này bao gồm việc xác thực cấu trúc XML đúng chuẩn và quản lý thuộc tính. Khi làm việc với dữ liệu có cấu trúc, bạn cần nhiều hơn chỉ việc trích xuất các phần tử. Kanna cung cấp quyền truy cập toàn bộ tài liệu XML, bao gồm các chú thích, chỉ thị xử lý và siêu dữ liệu tài liệu.
Cách thực hiện phân tích XML trong các ứng dụng Swift?
import Kanna
let xmlString = """
Swift Developer News
-
Kanna 6.0 Released with Swift 6 Support
Alex Johnson
Mon, 26 Jun 2024 00:00:00 GMT
-
New Features in Swift 5.10
Maria Garcia
Tue, 15 Apr 2024 00:00:00 GMT
"""
if let doc = try? Kanna.XML(xml: xmlString, encoding: .utf8) {
// Define a namespace mapping: prefix -> URI
// The prefix you use here ("dc") can be anything; it maps to the namespace URI
let namespaces = [
"dc": "http://purl.org/dc/elements/1.1/"
]
// Query elements in the "dc" namespace using the prefix
for item in doc.xpath("//item", namespaces: namespaces) {
let title = item.at_xpath("title")?.text ?? "No title"
let creator = item.at_xpath("dc:creator", namespaces: namespaces)?.text ?? "Unknown"
let pubDate = item.at_xpath("pubDate")?.text ?? "No date"
print("Title: \(title)")
print("Author: \(creator)")
print("Published: \(pubDate)\n")
}
}