HTML中的元素使用JSON解析两次

时间:2015-02-03 12:03:34

标签: android html json

我的网站包含149个这些标记

<!-- Begin Module Image -->
  <div class="module-img">                          
     <a href="http://prodigy.co.id/news/events/youtube-viewer-event/" >
        <img src="http://prodigy.co.id/wp-content/uploads/Prodigy_Sticky_YoutubeViewer.png" width="280" height="150" alt="Youtube Viewer Event!" />
        <span></span>
     </a>                           
     <div class="lightboxLink">
      <a class="popLink boxLink" href="http://prodigy.co.id/wp-content/uploads/Prodigy_Sticky_YoutubeViewer.png" data-rel="prettyPhoto[Youtube Viewer Event!]" title="Youtube Viewer Event!"></a>
     </div>                         
     <div class="thumbLink">
        <a class="popLink" href="http://prodigy.co.id/news/events/youtube-viewer-event/" title="Full Post"></a>
     </div>                         
  </div>                            
<!-- End Module Image -->

这是我的解析器:

Document document = Jsoup.connect(Server.EXPLORE_LINK).timeout(10 * 1000).get();

  Elements divs = document.select("div[class=module-img] a[href]");

     for (Element div : divs) {
         try {
             href = div.attr("href");
             Elements a = document.select("a[href=" + href + "] img[src]");
             src = a.attr("src");

             if (!src.startsWith("http://"))
             src = src.substring(src.indexOf("http://"));

             hrefs.add(href);
             srcs.add(src);

          } catch (Exception any) {
             any.printStackTrace();
        }
   }

我希望我的href为http://prodigy.co.id/news/events/youtube-viewer-event/,src为http://prodigy.co.id/wp-content/uploads/Prodigy_Sticky_YoutubeViewer.png 149次。在这一点上,我完全混淆了元素divs的大小是444,而不是应该是149。

请原谅我的懒惰,但我是这个JSON的新手,我一直在谷歌上搜索几个小时寻找答案。

2 个答案:

答案 0 :(得分:0)

我从未使用过此jsoup API,但查看您使用的选择器,您似乎正在查询所有来自<div class="module-img">的DESCENDED标记。请注意,每个模块中有3个<a>。这可以将444解释为148x3 = 444。 (你说有149个,但也许是第一次出现或者最后一次没有被计算在内。)

无论如何,试试这个:

Elements divs = document.select("div[class=module-img] > a[href]");

它应该只列出<a>来自直接下降的<div>个孩子。

这里有关于选择器和组合器的more

答案 1 :(得分:0)

你确定尺寸是444吗?如果它是447就有意义。

您的选择器对HTML代码中的所有三个链接都有效。空格意味着其间可以有任意数量的元素。如果您只想选择直接子节点,则必须使用'&gt;'介于两者之间:

Elements divs = document.select("div[class=module-img] > a[href]");

PS:你可以用

.classname 

而不是

div[class=classname]