Jsoup, как проверить, есть ли у элемента определенный дочерний элемент - PullRequest
0 голосов
/ 26 мая 2018

Как проверить, есть ли у элемента div элемент span в качестве дочернего элемента или нет.

У меня на html-странице есть div с именем класса col-md-6, сам div иногда имеет spanценового класса, а иногда и нет.

<div class="col-md-6">
<ul> <li> 
<span class="price">
<strong class="bold">70,000 </strong>USD</span> 
</li>
<li> 
</li>
<li>8775 views </li> 
</ul>
</div>

    
<div class="col-md-6">
<ul>
<li>
</li>
<li>yesterday</li>
<li>53 views</li>
</ul>
</div>
Я пробовал этот код, но он не печатал 0, как ожидалось!
 try 
 {
 Document doc = Jsoup.connect("https://www.bezaat.com/ksa/riyadh/سيارات/all").userAgent("Mozilla/5.0(Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").referrer("http://www.google.com").ignoreHttpErrors(true).get();  

 Elements EE = doc.select("div.col-md-12").select("div.col-md-6") ; 

 Elements E = doc.select("div.col-md-12").select("div.media.ads-style.reg").select("div.media-left"); 

 for(int i = 0;i < E.size();i++)
 {

 if(EE.get(i).select("span.price").text() !=  null)
 { 
 System.out.println(EE.get(i).select("span.price").text().replaceAll("[^0-9]",""));  
 }
 else
 {
  System.out.println("0"); 
 }}
 }
 catch(java.io.IOException e)
 {
  e.printStackTrace();
  }

1 Ответ

0 голосов
/ 27 мая 2018

Вам нужен селектор div.col-md-6 span[class=price] - найдите div с классом col-md-6, а затем найдите потомка с именем span price - обратите внимание на пробел между двумя частями запроса!
Пример кода -

String html1 = "<div class=\"col-md-6\">" +
            "<ul> <li> " +
            "<span class=\"price\">" +
            "<strong class=\"bold\">70,000 </strong>USD</span> " +
            "</li>" +
            "<li> " +
            "</li>" +
            "<li>8775 views </li> " +
            "</ul>" +
            "</div>";
String html2 = "<div class=\"col-md-6\">" +
            "<ul>" +
            "<li>" +
            "</li>" +
            "<li>yesterday</li>" +
            "<li>53 views</li>" +
            "</ul>" +
            "</div>";
Document doc1 = Jsoup.parse(html1);
Elements price1 = doc1.select("div.col-md-6 span[class=price]");
if (price1.size() > 0)
    System.out.println(price1.html());
else
    System.out.println("not found in html1");
Document doc2 = Jsoup.parse(html2);
Elements price2 = doc2.select("div.col-md-6 span[class=price]");
if (price2.size() > 0)
    System.out.println(price2.html());
else
    System.out.println("not found in html2");

А на выходе -

<strong class="bold">70,000 </strong>USD not found in html2

...