Kotlin में HTML पार्सिंग: उपकरणों और लाइब्रेरीज़ के लिए पूर्ण गाइड
HTML पार्सिंग (वेब पेजों से डेटा निकालना) — पार्सर, कंटेंट एनालाइज़र बनाने या बाहरी डेटा को एकीकृत करने में एक प्रमुख कार्य है। Kotlin इकोसिस्टम में कई शक्तिशाली लाइब्रेरीज़ मौजूद हैं जो HTML के साथ प्रभावी ढंग से काम करने की अनुमति देती हैं। इस लेख में हम सर्वोत्तम उपकरणों, उनकी विशेषताओं का विस्तार से विश्लेषण करेंगे और व्यावहारिक कोड उदाहरण प्रस्तुत करेंगे।
1. jsoup — HTML पार्सिंग के लिए डी-फैक्टो मानक
jsoup — HTML के साथ काम करने के लिए सबसे लोकप्रिय Java लाइब्रेरी है, जो Kotlin में भी बढ़िया काम करती है। यह HTML दस्तावेज़ों को लोड करने, पार्स करने और डेटा निकालने के लिए एक सुविधाजनक API प्रदान करती है।
मुख्य क्षमताएँ:
- URL, फ़ाइल या स्ट्रिंग से HTML लोड करना
- एलिमेंट खोजने के लिए CSS-सेलेक्टर का समर्थन
- अवांछित टैग से HTML को साफ करना
- DOM-ट्री में संशोधन
Kotlin में jsoup का उपयोग उदाहरण:
import org.jsoup.Jsoupimport org.jsoup.nodes.Document
fun main() { // HTML दस्तावेज़ लोड करें val doc: Document = Jsoup.connect("https://example.com").get() // पेज का शीर्षक निकालें val title: String = doc.title() println("शीर्षक: $title") // पेज पर सभी लिंक खोजें val links = doc.select("a[href]") links.forEach { link -> val href = link.attr("href") val text = link.text() println("लिंक: $text -> $href") } // किसी विशिष्ट ब्लॉक से टेक्स्ट निकालें val content = doc.select("div.content").text() println("कंटेंट: $content") // फॉर्म के साथ काम करना val form = doc.select("form").first() form?.select("input")?.forEach { input -> println("फ़ील्ड: ${input.attr("name")} = ${input.attr("value")}") }}2. Ktor Client + khtml — आधुनिक Kotlin स्टैक
Ktor Client — Kotlin के लिए एक एसिंक्रोनस HTTP-क्लाइंट है, जो khtml (Kotlin HTML parser) लाइब्रेरी के साथ बढ़िया मेल खाता है। साथ में वे वेब-स्क्रैपिंग के लिए एक शक्तिशाली उपकरण बनाते हैं।
इस दृष्टिकोण के लाभ:
- कोरूटीन का मूल समर्थन (suspend फ़ंक्शन)
- पेजों की एसिंक्रोनस लोडिंग
- HTTP अनुरोधों का लचीला कॉन्फ़िगरेशन
- cookies, सत्रों और प्रॉक्सी का समर्थन
Ktor Client और khtml के साथ उदाहरण:
import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*import kotlinx.coroutines.runBlockingimport org.jsoup.Jsoup
suspend fun fetchAndParse(url: String) { val client = HttpClient() try { // HTML की एसिंक्रोनस लोडिंग val response: HttpResponse = client.get(url) val html: String = response.bodyAsText() // jsoup के साथ पार्सिंग val doc = Jsoup.parse(html) val headlines = doc.select("h2, h3").map { it.text() } println("पेज पर शीर्षक:") headlines.forEach { println("- $it") } } catch (e: Exception) { println("लोड करने में त्रुटि: ${e.message}") } finally { client.close() }}
fun main() = runBlocking { fetchAndParse("https://kotlinlang.org")}3. Selenium WebDriver — डायनामिक पेजों के लिए
यदि साइट कंटेंट रेंडर करने के लिए JavaScript का सक्रिय रूप से उपयोग करती है, तो आपको Selenium WebDriver की आवश्यकता होगी। यह एक वास्तविक ब्राउज़र चलाता है और डायनामिक एलिमेंट्स के साथ इंटरैक्ट करने की अनुमति देता है।
Kotlin में Selenium के साथ उदाहरण:
import org.openqa.selenium.Byimport org.openqa.selenium.WebDriverimport org.openqa.selenium.chrome.ChromeDriverimport org.openqa.selenium.chrome.ChromeOptions
fun scrapeDynamicPage() { val options = ChromeOptions().apply { addArguments("--headless") // GUI के बिना मोड addArguments("