You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jsoup遍历div.g元素,实现所有标题在JList中逐个展示

解决Jsoup提取所有目标标题并展示在JList的问题

我明白你遇到的问题了——你的当前代码只能拿到最后一个div.g对应的标题,核心问题有两个:一是循环里每次都用新标题覆盖了title变量,最后只把最后一次的结果加入了列表模型;二是原代码用getElementsByTag("a")会误拿到页面里其他无关的a标签(比如带图片的a.picture),可能导致提取的文本不准确。

下面是修正后的完整代码,我会标注关键修改点:

String url = "http://www.google.com/search?q=example&tbm=nws&source=lnms";
try {
    // 1. 提前初始化列表模型,放在循环外部
    DefaultListModel<String> listModel = new DefaultListModel<>();
    
    Document doc = Jsoup.connect(url).userAgent("Chrome").timeout(5000).get();
    Elements gDivs = doc.select("div.g");
    
    for (Element gDiv : gDivs) {
        // 2. 使用精确选择器,仅定位class为title的a标签
        String title = gDiv.select("a.title").text();
        // 3. 每次提取到标题就直接加入列表模型
        listModel.addElement(title);
    }
    
    // 最后将填充好的模型绑定到JList
    jList.setModel(listModel);
} catch (IOException ex) {
    Logger.getLogger(MainUI.class.getName()).log(Level.SEVERE, null, ex);
}

关键修改说明:

  • 调整列表模型的生命周期:把DefaultListModel的创建移到循环之前,这样可以在循环过程中持续添加元素,而不是最后仅添加单个结果。
  • 精准定位目标元素:用select("a.title")替代getElementsByTag("a"),确保只提取我们需要的、class为title的a标签文本,避免混入其他无关内容。
  • 循环内实时添加元素:在每次循环提取到标题后,立刻调用listModel.addElement(title),这样所有符合条件的标题都会被依次加入到列表中。

修改后,你的JList就能完整展示所有从div.g下提取到的a.title文本,和你期望的输出完全一致。

内容的提问来源于stack exchange,提问作者user7146946

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:58:00