使用Jsoup从span类提取数据时出现问题

时间:2019-01-10 07:02:07

标签: java jsoup

您好,我需要以下代码的解决方案。我尝试从span类提取文本,但似乎所有在同一时间提取的文本都是可能的,这样我就可以一一提取文本了。

JAVA代码

public class Exractor {
    public static void main(String[] args) throws IOException {
        Document d = Jsoup.connect("https://www.brainyquote.com/topics").get();
        Elements e = d.select("div.col-md-4");
        for(Element el : e){
            Elements name = el.getElementsByTag("a");
            String text = name.text();
            System.out.println(text);
        }
    }
}

HTML输出

<div class="col-sm-6 col-md-4"> 
 <div class="bq_fl content indexContent topicContent"> 
  <div class="row"> 
   <div class="col-sm-6 col-xs-6"> 
    <div class="bqLn"> 
     <div class="bqLn"> 
      <a href="/topics/age" class="topicIndexChicklet" onclick="topicCl('/topics/age',1,'Index')">
	  <span class="topicContentName">Age</span> <span class="topicIndexArrow">
		<i class="fa fa-chevron-right" aria-hidden="true"></i>
	  </span> 
       <div style="clear:both"></div></a> 
     </div> 
    </div> 
    <div class="bqLn"> 
     <div class="bqLn"> 
      <a href="/topics/alone" class="topicIndexChicklet" onclick="topicCl('/topics/alone',2,'Index')">
	  <span class="topicContentName">Alone</span> <span class="topicIndexArrow">
	  <i class="fa fa-chevron-right" aria-hidden="true"></i>
	  </span> 
       <div style="clear:both"></div></a> 
     </div> 
    </div> 
    </div> 
   </div> 
  </div> 
 </div> 
</div>

JAVA输出

孤独的人惊人的愤怒周年建筑艺术态度美最好的生日聪明的商务车机会改变圣诞节通讯电脑冷静勇气爸爸约会死亡设计饮食梦想复活节教育环境平等体验失败信仰家庭著名父亲节恐惧金融健身食品宽恕自由友谊有趣未来园艺神善政毕业大幸福健康史家庭希望幽默想象力独立励志智力 嫉妒知识领导力学习合法生活爱情婚姻医学阵亡将士纪念日男人妈妈钱早上母亲节励志电影继续前进音乐性质新年的育儿耐心爱国主义和平宠物诗歌政治政治积极力量关系宗教尊重浪漫悲伤圣帕特里克节科学微笑社会空间体育实力成功同情老师技术青少年感恩感恩时间旅行信任真相情人节退伍军人节战争婚礼智慧妇女工作

预期输出

  • 年龄
  • 一个人
  • 很棒
  • 愤怒

我做错了,但我想不出来,请帮助我

1 个答案:

答案 0 :(得分:1)

public class Exractor {
    public static void main(String[] args) throws IOException {
        Document d = Jsoup.connect("https://www.brainyquote.com/topics").get();
        Elements e = d.select("div.col-md-4");
        for(Element el : e){
            Elements names = el.getElementsByTag("a"); //getElementsByTag returns elements
        for(Element name: names) {
            String text = name.text();
            System.out.println(text);
            }
        }
    }
}

在您的代码中,el.getElementsByTag(“ a”);返回的元素。从元素级别获取text()获取该元素及其所有子元素的组合文本。