SwiftSoup के साथ Swift (iOS/macOS) में HTML पार्सिंग
iOS और macOS ऐप डेवलपमेंट में अक्सर वेब पेजों से डेटा निकालने की ज़रूरत होती है। Python में BeautifulSoup और Scrapy जैसी शक्तिशाली लाइब्रेरीज़ हैं, लेकिन Swift की दुनिया में लंबे समय तक HTML पार्सिंग का कोई सुविधाजनक टूल नहीं था। यह कमी SwiftSoup ने पूरी की — यह लोकप्रिय Java लाइब्रेरी Jsoup का शुद्ध Swift पोर्ट है। SwiftSoup HTML डॉक्यूमेंट के साथ काम करने, DOM ट्री में नेविगेट करने, CSS सेलेक्टर से एलिमेंट खोजने और डेटा निकालने के लिए एक आसान API प्रदान करता है।
SwiftSoup क्या है?
SwiftSoup एक ओपन-सोर्स लाइब्रेरी है जो HTML को पार्स करने, डेटा निकालने और बदलने, और खतरनाक एलिमेंट्स से HTML को साफ करने की सुविधा देती है। यह सभी Apple प्लेटफॉर्म्स पर काम करती है: iOS, macOS, tvOS, watchOS। मुख्य विशेषताएं:
- स्ट्रिंग, URL या फ़ाइल से HTML पार्स करना
- CSS सेलेक्टर के साथ DOM ट्री में नेविगेशन
- एलिमेंट का टेक्स्ट, एट्रीब्यूट और HTML कोड निकालना
- डॉक्यूमेंट में बदलाव (एलिमेंट जोड़ना, हटाना, बदलना)
- XSS अटैक से HTML को साफ करना
- सभी आधुनिक HTML मानकों का समर्थन
SwiftSoup इंस्टॉल करना
इंस्टॉल करने का सबसे आसान तरीका Swift Package Manager है। Package.swift फ़ाइल में डिपेंडेंसी जोड़ें:
// swift-tools-version:5.5
import PackageDescription
let package = Package(
name: "MyProject",
dependencies: [
.package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.6.0")
],
targets: [
.target(
name: "MyProject",
dependencies: ["SwiftSoup"])
]
)
अगर आप Xcode का उपयोग कर रहे हैं, तो File → Add Packages... मेन्यू खोलें, रिपॉजिटरी URL पेस्ट करें और Add Package पर क्लिक करें।
HTML पार्सिंग का बेसिक उदाहरण
एक सरल उदाहरण — पेज का टाइटल निकालना:
import SwiftSoup
let html = "<html><head><title>PythonLib - डेवलपर्स के लिए टूल्स</title></head><body><p>नमस्ते दुनिया!</p></body></html>"
do {
let doc = try SwiftSoup.parse(html)
let title = try doc.title()
print("टाइटल: \(title)")
let bodyText = try doc.body()?.text()
print("body का टेक्स्ट: \(bodyText ?? "")")
} catch Exception.Error(let type, let message) {
print("त्रुटि: \(type) — \(message)")
} catch {
print("अज्ञात त्रुटि")
}
कंसोल आउटपुट:
टाइटल: PythonLib - डेवलपर्स के लिए टूल्स
body का टेक्स्ट: नमस्ते दुनिया!
CSS सेलेक्टर से एलिमेंट खोजना
SwiftSoup की सबसे बड़ी खूबी इसके शक्तिशाली सेलेक्टर हैं, जो वेब डेवलपर्स से परिचित हैं। आप किसी भी CSS सेलेक्टर का उपयोग कर सकते हैं:
let html = """
<div class="articles">
<article id="post-1">
<h2 class="title">SwiftSoup ट्यूटोरियल</h2>
<p class="meta">प्रकाशित: 2024-01-15</p>
<p>लेख की सामग्री...</p>
</article>
<article id="post-2">
<h2 class="title">Swift में HTML पार्सिंग</h2>
<p class="meta">प्रकाशित: 2024-02-20</p>
<p>एक और सामग्री...</p>
</article>
</div>
"""
let doc = try SwiftSoup.parse(html)
// क्लास से खोजें
let titles = try doc.select(".title")
for title in titles {
print(try title.text())
}
// ID से खोजें
if let post = try doc.select("#post-1").first() {
let h2 = try post.select("h2").text()
let date = try post.select(".meta").text()
print("लेख: \(h2) — \(date)")
}
// कम्बाइंड सेलेक्टर
let articles = try doc.select("div.articles > article")
print("लेख मिले: \(articles.count)")
एट्रीब्यूट और लिंक निकालना
अक्सर