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>

이것은 안드로이드 코드를 썼는 작동하지 않는 것:

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 링크를 추가하는 내 목록에서 사용하는 앱입니다.

Edit2:

그래서 내가 발견 또 다른 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>

이를 일으키는 변수의 내용을 HTML 조각과 함께 클래스 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.serverli.server.

2021-12-01 22:21:33

나는 변경할 수 없습니다 HTML 으로는 나의 웹 사이트입니다. 내가 하려고 합의하는 다른 솔루션 감사합니다!
Meggan Sam

당신은 환영합니@MegganSam,내가 도움이 되기를 바랍니다. 업데이트에 대한 답에 대한 의견을 제공하는 방법을 가능하게 좁은 선택을 경우에 당신을 얻을 원하지 않는 링크입니다. I 테스트하지 않은 이 마지막 업데이트합니다. 내가 도움이 되기를 바랍니다.
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ý
..................................................................................................................