Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड ऐप में वेब स्क्रैपिंग कैसे करें? (Jsoup लाइब्रेरी)

एंड्रॉइड में Jsoup लाइब्रेरी से वेब स्क्रैपिंग — पूरा गाइड

Jsoup एक लोकप्रिय Java HTML पार्सर लाइब्रेरी है जो "जक्वेरी-जैसे" सिंटैक्स में HTML डॉक्यूमेंट से डेटा निकालने, मैनिपुलेट करने और साफ़ करने की सुविधा देती है। यह एंड्रॉइड में वेब स्क्रैपिंग के लिए मानक विकल्प है।

⚠️ महत्वपूर्ण चेतावनी

कानूनी/नैतिक नोट: किसी वेबसाइट को स्क्रैप करने से पहले उसकी robots.txt और Terms of Service जांचें। कई साइट्स स्क्रैपिंग प्रतिबंधित करती हैं। आधिकारिक API उपलब्ध हो तो उसी का उपयोग करें। अत्यधिक रिक्वेस्ट्स से सर्वर पर लोड पड़ता है — Thread.sleep() या रेट लिमिटिंग का उपयोग करें।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio → File → New → New Project → "Empty Activity" → Finish।

चरण 2: Jsoup डिपेंडेंसी जोड़ें (build.gradle.kts / build.gradle)

// build.gradle (Module: app) — Groovy DSL
dependencies {
    implementation 'org.jsoup:jsoup:1.17.2' // नवीनतम वर्ज़न जांचें
}

// या Kotlin DSL (build.gradle.kts)
dependencies {
    implementation("org.jsoup:jsoup:1.17.2")
}

सिंक करने के बाद Sync Now दबाएं।

चरण 3: इंटरनेट परमिशन (AndroidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.webscrapingdemo">

    <uses-permission android:name="android.permission.INTERNET" />

    <application ...>
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

चरण 4: Layout (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnScrape"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="32dp"
        android:text="वेबसाइट से डेटा निकालें" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/btnScrape"
        android:layout_marginBottom="16dp">

        <TextView
            android:id="@+id/tvResult"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="14sp"
            android:lineSpacingExtra="4dp"
            android:text="परिणाम यहां दिखेगा..." />

    </ScrollView>

</RelativeLayout>

चरण 5: MainActivity.java — AsyncTask में स्क्रैपिंग

नोट: AsyncTask API 30+ में डिप्रिकेटेड है। आधुनिक कोड में Coroutines + OkHttp या RxJava का उपयोग करें। यह उदाहरण केवल Jsoup API समझाने के लिए है।
package com.example.webscrapingdemo;

import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private TextView tvResult;
    private Button btnScrape;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvResult = findViewById(R.id.tvResult);
        btnScrape = findViewById(R.id.btnScrape);

        btnScrape.setOnClickListener(v -> new ScrapeTask().execute());
    }

    // बैकग्राउंड थ्रेड में नेटवर्क ऑपरेशन
    private class ScrapeTask extends AsyncTask<Void, Void, String> {

        @Override
        protected void onPreExecute() {
            tvResult.setText("लोड हो रहा है...");
        }

        @Override
        protected String doInBackground(Void... voids) {
            try {
                // वेबसाइट से HTML डॉक्यूमेंट प्राप्त करें
                Document doc = Jsoup.connect("https://www.tutorialspoint.com/css_online_training/index.asp")
                        .userAgent("Mozilla/5.0 (Android) Jsoup Scraper") // कुछ साइट्स बॉट ब्लॉक करती हैं
                        .timeout(10000) // 10 सेकंड टाइमआउट
                        .get();

                // उदाहरण: सभी 

हेडिंग्स निकालें Elements headings = doc.select("h2"); StringBuilder sb = new StringBuilder(); sb.append("पाए गए हेडिंग्स (").append(headings.size()).append("):\n\n"); for (Element heading : headings) { sb.append("• ").append(heading.text()).append("\n"); } // उदाहरण: सभी लिंक्स निकालें Elements links = doc.select("a[href]"); sb.append("\nपाए गए लिंक्स (").append(links.size()).append("):\n\n"); int count = 0; for (Element link : links) { if (count++ > 10) break; // केवल पहले 10 दिखाएं String href = link.attr("abs:href"); // एब्सोल्यूट URL String text = link.text().trim(); if (!text.isEmpty()) { sb.append("• ").append(text).append(" → ").append(href).append("\n"); } } return sb.toString(); } catch (IOException e) { e.printStackTrace(); return "त्रुटि: " + e.getMessage(); } } @Override protected void onPostExecute(String result) { tvResult.setText(result); } } }

चरण 6: चलाएं और टेस्ट करें

  1. डिवाइस/एमुलेटर पर ऐप इंस्टॉल करें।
  2. "वेबसाइट से डेटा निकालें" बटन दबाएं।
  3. कुछ सेकंड में पेज के हेडिंग्स और लिंक्स TextView में दिखेंगे।

💡 Jsoup के शक्तिशाली सेलेक्टर्स (CSS-style)

सेलेक्टरअर्थउदाहरण
tagटैग नाम सेdoc.select("div")
#idID सेdoc.select("#main-content")
.classक्लास सेdoc.select(".article-body")
[attr]एट्रिब्यूट मौजूद हैdoc.select("a[href]")
[attr=value]एट्रिब्यूट मान बराबरdoc.select("input[type=submit]")
parent > childडायरेक्ट चाइल्डdoc.select("ul > li")
ancestor descendantकोई भी डिसेंडेंटdoc.select(".container p")
:contains(text)टेक्स्ट कंटेन करता हैdoc.select("p:contains(Android)")

🚀 आधुनिक विकल्प: Coroutines + OkHttp + Jsoup

// build.gradle.kts
dependencies {
    implementation("org.jsoup:jsoup:1.17.2")
    implementation("com.squareup.okhttp3:okhttp:4.12.0")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
}

// Repository/ViewModel में
suspend fun scrapeWebsite(): Result<String> = try {
    val client = OkHttpClient()
    val request = Request.Builder()
        .url("https://example.com")
        .header("User-Agent", "Mozilla/5.0")
        .build()

    val response = client.newCall(request).await()
    val html = response.body?.string() ?: return Result.failure(IOException("Empty body"))

    val doc = Jsoup.parse(html)
    val titles = doc.select("h1, h2, h3").map { it.text() }
    Result.success(titles.joinToString("\n"))
} catch (e: Exception) {
    Result.failure(e)
}

सारांश

  • ✅ Jsoup एंड्रॉइड में HTML पार्सिंग/स्क्रैपिंग का मानक लाइब्रेरी है।
  • ✅ CSS सेलेक्टर्स से डेटा निकालना बहुत आसान है।
  • ⚠️ कभी भी मेन थ्रेड पर नेटवर्क कॉल न करें — ANR क्रैश होगा।
  • ⚠️ कानूनी/नैतिक दिशानिर्देशों का पालन करें।
  • 🔄 नए प्रोजेक्ट्स के लिए Coroutines + OkHttp + Jsoup कॉम्बिनेशन बेहतर है।
  1. Android ऐप से वेबसाइट को ब्राउज़र में कैसे खोलें? Android ऐप से वेबसाइट को ब्राउज़र में कैसे खोलें?

    Android ऐप से किसी वेबसाइट को डिफ़ॉल्ट ब्राउज़र में खोलना यह ट्यूटोरियल दिखाता है कि कैसे एक बटन क्लिक पर किसी URL को Android के डिफ़ॉल्ट वेब ब्राउज़र में खोला जाए। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनकर नया प्रोजेक्ट बनाएं। चरण 2: लेआउट में बटन जोड़ें res/layout/ac

  1. एंड्रॉइड में लाइन कैसे ड्रा करें? (Canvas/Paint) एंड्रॉइड में लाइन कैसे ड्रा करें? (Canvas/Paint)

    एंड्रॉइड में Canvas और Paint से लाइन (और शेप्स) ड्रा करना एंड्रॉइड में कस्टम ड्राइंग के लिए Canvas (ड्राइंग सतह) और Paint (स्टाइल: रंग, चौड़ाई, स्ट्रोक/फिल) उपयोग करते हैं। दो मुख्य दृष्टिकोण हैं: कस्टम View (onDraw() ओवरराइड) — **सिफारिश किया गया**, पुन: उपयोग योग्य, प्रदर्शन अच्छा। Bitmap पर ड्रा

  1. Android ऐप को प्रोग्रामेटिकली कैसे बंद करें? Android ऐप को प्रोग्रामेटिकली कैसे बंद करें?

    यह उदाहरण दर्शाता है कि Android ऐप को बटन क्लिक पर प्रोग्रामेटिकली कैसे बंद किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=https://schemas