JSoup में सक्षम नहीं लिंक प्राप्त करने के लिए html से

0

सवाल

मैं कोशिश कर रहा हूँ प्राप्त करने के लिए लिंक से html के एक साइट है, लेकिन ऐसा करने में असमर्थ का उपयोग कर Jsoup.

इस HTML है:

<div class="anime_muti_link">
    <ul>
  <li><div class="doamin">Domain</div><div class="link">Link</div></li>
  <li class="anime">
    <a href="#" class="active" rel="1" data-video="example.com" ><div class="server m1">Server m1</div><span>Watch This Link</span></a>
  </li>
    
  <li class="anime">
    <a href="#" rel="1" data-video="example.com" ><div class="server m1">Server m2</div><span>Watch This Link</span></a>
  </li>
  
              <li class="xstreamcdn">
      <a href="#" rel="29" data-video="example.com">Xstreamcdn</div><span>Watch This Link</span></a>
    </li>
          <li class="mixdrop">
      <a href="#" rel="7" data-video="example.com"><div class="server mixdrop">Mixdrop</div><span>Watch This Link</span></a>
    </li>
          <li class="streamsb">
      <a href="#" rel="13" data-video="example.com">StreamSB</div><span>Watch This Link</span></a>
    </li>
          <li class="doodstream">
      <a href="#" rel="14" data-video="example.com">Doodstream</div><span>Watch This Link</span></a>
    </li>
  
</ul>
</div>

इस android कोड लिखा था कि मैं नहीं है, जो काम करने लगते हैं:

try {
                Document doc = Jsoup.connect(URL).get();
                Elements content = doc.getElementsByClass("anime_muti_link");
                Elements links = content.select("a");

                String[] urls = new String[links.size()];
                for (int i = 0; i < links.size(); i++) {
                    urls[i] = links.get(i).attr("data-video");
                    if (!urls[i].startsWith("https://")) {
                        urls[i] = "https:" + urls[i];
                    }
                }
                arrayList.addAll(Arrays.asList(urls));
                Log.d("CALLING_URL", "Links: " + Arrays.toString(urls));

            } catch (IOException e) {
                e.getMessage();
            }

कर सकते हैं किसी को कृपया मुझे इस के साथ मदद? धन्यवाद

संपादित करें: मूल रूप से मैं कोशिश कर रहा हूँ प्राप्त करने के लिए उन 6 लिंक जोड़ने और उन्हें करने के लिए अपनी सूची का उपयोग करने के लिए यह अनुप्रयोग के भीतर.

संपादित करें 2:

तो मैंने पाया एक और HTML कर सकते हैं कि लगता है बेहतर:

<div class="heading-servers">
     <span><i class="fa fa-signal"></i> Servers</span>
     <ul class="servers">
      <li data-vs="https://example.com" class="server server-active" style="display: block;" onclick="return loadIframe('ifrm', this.getAttribute('data-vs'));">Netu</li>
      <li data-vs="https://example.com" class="server" style="display: block;" onclick="return loadIframe('ifrm', this.getAttribute('data-vs'));">VideoVard</li>
      <li data-vs="https://example.com" class="server" style="display: block;" onclick="return loadIframe('ifrm', this.getAttribute('data-vs'));">Doodstream</li>
      <li data-vs="https://example.com" class="server" style="display: block;" onclick="return loadIframe('ifrm', this.getAttribute('data-vs'));">Okstream</li>
     </ul>
    </div>
android android-studio java jsoup
2021-11-23 21:52:18
1

सबसे अच्छा जवाब

2

के रूप में आप देख सकते हैं, इस li परिभाषा आप कर रहे हैं सहित एक नेस्टेड div:

<li class="xstreamcdn">
      <a href="#" rel="29" data-video="example.com">Xstreamcdn</div><span>Watch This Link</span></a>
    </li>

इस कारण है कि चर सामग्री, एचटीएमएल टुकड़ा के साथ वर्ग anime_muti_linkकरने के लिए , की तरह देखो:

<div class="anime_muti_link"> 
 <ul> 
  <li>
   <div class="doamin">
    Domain
   </div>
   <div class="link">
    Link
   </div></li> 
  <li class="anime"> <a href="#" class="active" rel="1" data-video="example.com">
    <div class="server m1">
     Server m1
    </div><span>Watch This Link</span></a> </li> 
  <li class="anime"> <a href="#" rel="1" data-video="example.com">
    <div class="server m1">
     Server m2
    </div><span>Watch This Link</span></a> </li> 
  <li class="xstreamcdn"> <a href="#" rel="29" data-video="example.com">Xstreamcdn</a></li>
 </ul>
</div>

एक समान परिणाम प्राप्त किया जाएगा यहां तक कि अगर तुम साफ अपने HTML. मैं इस कोड से एक मेरे पिछले जवाब:

Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.setIndentContent(true);
tidy.setPrintBodyOnly(true);
tidy.setInputEncoding("UTF-8");
tidy.setOutputEncoding("UTF-8");
tidy.setSmartIndent(true);
tidy.setShowWarnings(false);
tidy.setQuiet(true);
tidy.setTidyMark(false);

org.w3c.dom.Document htmlDOM = tidy.parseDOM(new ByteArrayInputStream(html.getBytes()), null);

OutputStream out = new ByteArrayOutputStream();
tidy.pprint(htmlDOM, out);
String tidiedHtml = out.toString();
// System.out.println(tidiedHtml);

Document document = Jsoup.parse(tidiedHtml);
Elements content = document.getElementsByClass("anime_muti_link");
System.out.println(content);

और यह है क्यों आप कर रहे हैं खोजने के केवल तीन लंगर.

की कोशिश करो, कृपया सही अपने HTML या का चयन लंगर टैग के रूप में दस्तावेज़ स्तर के बजाय:

Document document = Jsoup.parse(html);
// Elements content = document.getElementsByClass("anime_muti_link");
// System.out.println(content);
Elements links = document.select("a");

String[] urls = new String[links.size()];
for (int i = 0; i < links.size(); i++) {
  urls[i] = links.get(i).attr("data-video");
  if (!urls[i].startsWith("https://")) {
    urls[i] = "https://" + urls[i];
  }
}
System.out.println(Arrays.asList(urls));

यदि परिणाम प्राप्त होता है अवांछित लिंक, शायद आप की कोशिश कर सकते हैं संकुचन के चयनकर्ता का इस्तेमाल किया है, कुछ की तरह:

document.select(".anime_muti_link a")

यदि यह काम नहीं करता है, एक और संभव विकल्प हो सकता है का चयन लंगर तत्वों के साथ एक data-video विशेषता, a[data-video]:

Document document = Jsoup.parse(html);
Elements videoLinks = document.select("a[data-video]");

String[] urls = new String[videoLinks.size()];
for (int i = 0; i < videoLinks.size(); i++) {
  urls[i] = videoLinks.get(i).attr("data-video");
  if (!urls[i].startsWith("https://")) {
    urls[i] = "https://" + urls[i];
  }
}
System.out.println(Arrays.asList(urls));

के साथ अपने नए परीक्षण के मामले में, आप प्राप्त कर सकते हैं वांछित जानकारी के साथ एक बहुत ही इसी तरह के कोड के बारे में:

String html = "<div class=\"heading-servers\">\n" +
    "     <span><i class=\"fa fa-signal\"></i> Servers</span>\n" +
    "     <ul class=\"servers\">\n" +
    "      <li data-vs=\"https://example.com\" class=\"server server-active\" style=\"display: block;\" onclick=\"return loadIframe('ifrm', this.getAttribute('data-vs'));\">Netu</li>\n" +
    "      <li data-vs=\"https://example.com\" class=\"server\" style=\"display: block;\" onclick=\"return loadIframe('ifrm', this.getAttribute('data-vs'));\">VideoVard</li>\n" +
    "      <li data-vs=\"https://example.com\" class=\"server\" style=\"display: block;\" onclick=\"return loadIframe('ifrm', this.getAttribute('data-vs'));\">Doodstream</li>\n" +
    "      <li data-vs=\"https://example.com\" class=\"server\" style=\"display: block;\" onclick=\"return loadIframe('ifrm', this.getAttribute('data-vs'));\">Okstream</li>\n" +
    "     </ul>\n" +
    "    </div>";

Document document = Jsoup.parse(html);
Elements videoLinks = document.select("div.heading-servers ul.servers li.server");

String[] urls = new String[videoLinks.size()];
for (int i = 0; i < videoLinks.size(); i++) {
  urls[i] = videoLinks.get(i).attr("data-vs");
  if (!urls[i].startsWith("https://")) {
    urls[i] = "https://" + urls[i];
  }
}

System.out.println(Arrays.asList(urls));

सबसे महत्वपूर्ण हिस्सा है की परिभाषा चयनकर्ता लागू किया जाना चाहिए कि करने के लिए दस्तावेज़ पार्स, div.heading-servers ul.servers li.server हमारे मामले में.

मैं प्रदान की एक चयनकर्ता के साथ कई टुकड़े है, लेकिन वास्तविक आधार पर HTML का उपयोग यह हो सकता है के साथ सरल ul.servers li.server या यहां तक कि li.server.

2021-12-01 22:21:33

मैं नहीं बदल सकते HTML के रूप में नहीं है कि मेरी वेबसाइट. मैं कोशिश करता हूँ अपने अन्य समाधान है, धन्यवाद!
Meggan Sam

आप का स्वागत कर रहे हैं @MegganSam, मुझे आशा है कि यह मदद करता है । मैं अद्यतन करने के लिए जवाब प्रदान के बारे में प्रतिक्रिया करने के लिए कैसे संभवतः संकीर्ण चयनकर्ता मामले में आप प्राप्त अवांछित लिंक. मैं परीक्षण नहीं किया है यह पिछले अद्यतन. मुझे आशा है कि यह मदद करता है ।
jccampanero

@MegganSam में सक्षम थे का परीक्षण करने के लिए प्रस्तावित समाधान? यह काम किया?
jccampanero

मैंने किया था की कोशिश करो, हाँ. दुर्भाग्य से, यह काम नहीं करता है :(
Meggan Sam

मैं माफी चाहता हूँ सुना है कि. मुझे लगता है कि यह करने के लिए प्रसंस्करण के साथ पूरे HTML दस्तावेज़. मैं अद्यतन के जवाब देने की कोशिश कर रहा है उपलब्ध कराने के एक और विकल्प है । कृपया सकता है, आप की कोशिश की? मुझे आशा है कि यह मदद करता है ।
jccampanero

कोशिश कर के लिए धन्यवाद मदद करने के लिए, लेकिन लगता है जैसे HTML में ही लिखा नहीं है, अच्छी तरह से तो मैं संपादित किया है के साथ मेरे सवाल का एक और एक है कि बच्चे कक्षाओं में भी कर सकते हैं तो आप शायद मुझे उस के साथ मदद? मैं करने की कोशिश की आप समाधान पर एक नया लेकिन काम नहीं करता है कि या तो दुख की बात है
Meggan Sam

आप का स्वागत कर रहे हैं. हाँ, मैं आप के साथ सहमत Meggan, शायद वहाँ होना चाहिए कुछ गलत HTML में. के बारे में अपने संस्करण में, मैं अद्यतन मेरा जवाब के साथ एक संभव समाधान है । कृपया सकता है, आप की कोशिश की?
jccampanero

यह काम किया है, omg, धन्यवाद एक टन!!!
Meggan Sam

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................