我的网站包含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的新手,我一直在谷歌上搜索几个小时寻找答案。
答案 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]