1、需求:爬取http://caijing.bandao.cn/list.asp?cate=YW&page=1财经要闻栏目下的新闻标题、url、时间。

[Kotlin]用fold&mapTo&Jsoup爬取新闻

2、实现




Jsoup.connect("http://caijing.bandao.cn/list.asp?cate=YW&page=1")
        .timeout(5000)
        .get()
        .getElementsByClass("centerAllList")
        .fold(ArrayList<Map<String,String>>()){
            acc, elements ->
            elements.getElementsByTag("li")
                    .mapTo(acc){
                        mapOf(
                                "text" to it.getElementsByTag("a").html(),
                                "href" to it.getElementsByTag("a").attr("href"),
                                "date" to it.getElementsByClass("date").html()
                        )
                    }
        }.forEach(::println)

3、分析

1)首先获取页面上的centerAllList类,新闻数据都在这里面

2)在centerAllList类下,一对li标签代表一条新闻信息

3)我们看到,acc和elements参数被传进函数中,其中acc表示最后要返回的那个总的List;而elements表示centerAllList的List。我们把此List遍历,每一个子元素都代表一个centerAllList。接着我们获取centerAllList下所有的li,这样我们就能得到由li组成的List。

4)现在我们已经获取到所有的li了,接下来我们把li转为Map,一个Map代表一条新闻,所以我们最后需要的对象是由Map组成的List。其中acc代表最后要返回的List,而it代表每一个li。我们用mapTo把li转为Map,并将其存入到acc中,此时我们就得到了由Map组成的List了。

相关文章:

  • 2021-08-06
  • 2022-12-23
  • 2021-11-19
  • 2021-08-26
  • 2021-09-15
  • 2021-04-11
猜你喜欢
  • 2021-04-15
  • 2022-12-23
  • 2021-09-14
  • 2021-10-19
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案