ไลบรารี Swift ฟรีสำหรับแยกวิเคราะห์และจัดการข้อมูล HTML

ไลบรารี Swift แบบโอเพนซอร์สสำหรับการแยกวิเคราะห์ HTML/XML ที่ให้ API ของ Swift ที่สะอาดสำหรับการแยกวิเคราะห์และการเดินทางผ่านเอกสาร HTML และ XML อย่างง่ายดาย.

Kanna คืออะไร?

หากคุณเคยสร้างแอปพลิเคชัน Swift ที่ต้องดึงข้อมูลจากหน้าเว็บ, แยกวิเคราะห์การตอบสนองของ API ในรูปแบบ XML, หรือขูดข้อมูลที่มีโครงสร้าง, คุณอาจเคยเจอความท้าทายในการทำงานกับสตริง HTML และ XML ดิบ. ไลบรารีมาตรฐานของ Swift ไม่ได้รวมตัวแยกวิเคราะห์แบบเนทีฟและใช้งานง่ายสำหรับรูปแบบเหล่านี้, ซึ่งเป็นจุดที่ Kanna เข้ามาช่วยเหลือ. ที่แกนหลัก, Kanna ให้ API Swift ที่สะอาดสำหรับการแยกวิเคราะห์และการเดินทางผ่านเอกสาร HTML และ XML. ภายใต้การทำงาน, มันมอบภาระงานหนักให้กับ libxml2, ซึ่งหมายความว่าคุณจะได้รับประสิทธิภาพการแยกวิเคราะห์ที่มั่นคงโดยไม่ต้องเขียนกฎไวยากรณ์ที่ซับซ้อนเอง.

Kanna โดดเด่นในระบบนิเวศของ Swift ด้วยความเรียบง่ายและพลังของมัน ด้วย API ที่ใช้งานง่าย คุณสามารถนำทางและจัดการเอกสาร HTML/XML ด้วยวิธีการสอบถามที่คุ้นเคยเช่น XPath 1.0 และตัวเลือก CSS3 ไม่ว่าคุณจะสร้างเว็บสคราเปอร์, ดึงข้อมูลจากฟีด RSS, หรือประมวลผลไฟล์กำหนดค่า XML, Kanna มีเครื่องมือที่คุณต้องการ การสนับสนุนแบบข้ามแพลตฟอร์มเป็นหนึ่งในคุณสมบัติที่น่าสนใจที่สุดของ Kanna มันทำงานบน macOS, iOS, tvOS, watchOS, และแม้กระทั่ง Linux XPath 1.0 และตัวเลือก CSS3 ให้วิธีการสอบถามเอกสารที่มีพลังและเป็นมาตรฐานอุตสาหกรรมสองวิธี การสนับสนุนคู่ของทั้งตัวเลือก CSS3 และ XPath 1.0 ทำให้มันยืดหยุ่นพอที่จะจัดการทุกอย่างตั้งแต่การสกัด HTML อย่างง่ายจนถึงการประมวลผล XML ที่มีเนมสเปซซับซ้อน ไม่ว่าคุณจะสร้างแอป iOS ที่ใช้ฟีด RSS, เซิร์ฟเวอร์ Vapor ที่สคราเปอร์ราคาคู่แข่ง, หรือเครื่องมือบรรทัดคำสั่งที่แปลงข้อมูล XML, Kanna ให้เครื่องมือที่ทำงานได้อย่างเชื่อถือได้และสวยงาม

Previous Next

เริ่มต้นกับ Kanna

วิธีที่แนะนำและง่ายที่สุดในการติดตั้ง Kanna คือการใช้ CocoaPods โปรดใช้คำสั่งต่อไปนี้เพื่อการติดตั้งที่ราบรื่น.

ติดตั้ง Kanna ผ่าน Carthage

// add the following line to your Podfile:
use_frameworks! 
pod 'Kanna', '~> 5.2.2'

// Then run:
$ pod install

ติดตั้ง Kanna ผ่าน CocoaPods


// If you prefer Carthage, add this line to your Cartfile:
github "tid-kijyun/Kanna" ~> 5.2.2

คุณยังสามารถติดตั้งด้วยตนเองได้; ดาวน์โหลดไฟล์เวอร์ชันล่าสุดโดยตรงจากที่เก็บ GitHub.

การแยกวิเคราะห์เอกสาร HTML ด้วย Swift

ไลบรารีโอเพนซอร์ส Kanna มีการสนับสนุนการโหลดและการแยกวิเคราะห์เอกสาร HTML ภายในแอปพลิเคชัน Swift อยู่แล้ว กรณีการใช้งานที่พบบ่อยที่สุดสำหรับการแยกวิเคราะห์ HTML นี้คือ ไม่ว่าจะดาวน์โหลดจากเว็บหรือสร้างขึ้นโดยโปรแกรม นี่คือตัวอย่างง่ายที่แสดงว่าผู้พัฒนาซอฟต์แวร์สามารถใช้ฟังก์ชัน HTML ที่รับสตริง HTML ดิบ, เข้ารหัสและส่งคืนอ็อบเจกต์เอกสารที่มีคุณสมบัติเช่น .title และ .body ซึ่งให้การเข้าถึงองค์ประกอบทั่วไปได้อย่างรวดเร็วโดยไม่ต้องใช้ตัวเลือก.

วิธีแยกวิเคราะห์ HTML ด้วยการเข้ารหัส UTF-8 ผ่านไลบรารี Swift?

 import Kanna

// A sample HTML string representing a webpage
let htmlString = """

  
    My Tech Blog
  
  
    

ยินดีต้อนรับสู่การแยกวิเคราะห์ Swift

Kanna ทำให้การแยกวิเคราะห์ HTML ง่ายและสวยงาม.

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") }

การสนับสนุนการค้นหา Selector ของ CSS3

ไลบรารี Kanna ได้รวมการสนับสนุนเต็มรูปแบบสำหรับ CSS3 Selector ซึ่งทำให้ผู้พัฒนาสามารถใช้ไวยากรณ์ CSS ที่คุ้นเคยเพื่อค้นหาองค์ประกอบได้ การสนับสนุน selector ของ Kanna ช่วยให้คุณใช้ไวยากรณ์ selector เดียวกันที่คุณอาจเขียนในไฟล์สไตล์ชีตหรือใน JavaScript's querySelectorAll สิ่งนี้ทำให้ใช้งานได้อย่างเป็นธรรมชาติสำหรับผู้ที่มาจากพื้นฐานการพัฒนาเว็บ ตัวอย่างต่อไปนี้แสดงวิธีที่ผู้ใช้สามารถเลือกองค์ประกอบ HTML และวนซ้ำหลายองค์ประกอบภายในแอปพลิเคชัน Swift

วิธีเลือกหลายองค์ประกอบ HTML & ดึงข้อความจากมันผ่านไลบรารี Swift?

import Kanna

let htmlString = """


  
  • หนังสือ Swift $39.99
  • คู่มือ Xcode $24.99
  • พื้นฐาน 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)") } }

การสนับสนุนการค้นหา XPath 1.0

ไลบรารี Kanna มีการสนับสนุนการสอบถาม XPath 1.0 ภายในแอป Swift. XPath ให้วิธีที่ทรงพลังและยืดหยุ่นมากขึ้นในการนำทางผ่านองค์ประกอบและแอตทริบิวต์ในเอกสาร XML/HTML ซึ่งมีประโยชน์เป็นพิเศษสำหรับโครงสร้างเอกสารที่ซับซ้อน นิพจน์ XPath สามารถเดินทางผ่านเอกสารในวิธีที่ selector ของ CSS ทำไม่ได้ เช่น การค้นหาองค์ประกอบตามตำแหน่ง ความสัมพันธ์พ่อแม่-ลูก หรือการจับคู่ข้อความที่ซับซ้อน มันเป็นสิ่งจำเป็นสำหรับการแยกวิเคราะห์ XML และการขูด HTML ที่ซับซ้อน

การแยกวิเคราะห์และตรวจสอบ XML ด้วย Swift

นอกเหนือจากการแยกวิเคราะห์ HTML ขั้นพื้นฐาน ไลบรารีโอเพ่นซอร์ส Kanna มีความสามารถในการจัดการ XML อย่างแข็งแกร่ง ซึ่งรวมถึงการตรวจสอบความถูกต้องของโครงสร้าง XML และการจัดการแอตทริบิวต์ เมื่อทำงานกับข้อมูลที่มีโครงสร้าง คุณต้องการมากกว่าการสกัดเอาองค์ประกอบ Kanna ให้การเข้าถึงเอกสาร XML อย่างเต็มรูปแบบ รวมถึงคอมเมนต์ คำสั่งประมวลผล และเมตาดาต้าเอกสาร

วิธีทำการแยกวิเคราะห์ XML ภายในแอป 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")
    }
}


 ไทย