如何指定Jsoup返回的超链接数量?Java实现仅返回前10个链接
提取网页前10个超链接的实现方法
这里有几种简单可行的方法来实现只返回前10个超链接:
方法1:循环中加入计数器终止逻辑
直接在遍历循环里添加计数器,当计数达到10时跳出循环,只会处理前10个链接。修改后的代码如下:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class link_demo { public static void main( String[] args ) throws IOException{ Document doc = Jsoup.connect("http://www.javatpoint.com").get(); Elements links = doc.select("a[href]"); int count = 0; for (Element link : links) { if (count >= 10) { break; } System.out.println("link : " + link.attr("href")); System.out.println("text : " + link.text()); count++; } } }
方法2:使用Jsoup选择器直接限制结果数量
利用Jsoup的:lt(n)选择器(lt是less than的缩写),在select阶段就只获取前10个符合条件的链接元素,代码更简洁:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class link_demo { public static void main( String[] args ) throws IOException{ Document doc = Jsoup.connect("http://www.javatpoint.com").get(); // 使用:lt(10)选择前10个带href属性的a标签 Elements links = doc.select("a[href]:lt(10)"); for (Element link : links) { System.out.println("link : " + link.attr("href")); System.out.println("text : " + link.text()); } } }
方法3:利用List的subList方法截取前10个元素
因为Elements类实现了List<Element>接口,所以可以用subList方法直接截取前10个元素,同时用Math.min处理网页链接不足10个的情况,避免索引越界:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.util.List; public class link_demo { public static void main( String[] args ) throws IOException{ Document doc = Jsoup.connect("http://www.javatpoint.com").get(); Elements links = doc.select("a[href]"); // 截取前10个元素,如果链接总数不足10则取全部 List<Element> top10Links = links.subList(0, Math.min(10, links.size())); for (Element link : top10Links) { System.out.println("link : " + link.attr("href")); System.out.println("text : " + link.text()); } } }
内容的提问来源于stack exchange,提问作者Farkhad
相关产品推荐
相关产品推荐

