Jsoup+FastJson制作新闻数据接口-Demo

摘要:
】它通常用于编写和直接使用这个适合于在服务器端组合servlet的接口:您需要下载jsoop+fastjson包。Jsoup用户手册:http://www.open-open.com/jsoup/selector-syntax.htmfastJson用户手册:https://www.w3cschool.cn/fastjson/fastjson-ex2.html我在这里不再重复。官方API是最可靠的!答案是必须编写它,因为我们使用fastJson:必须编写默认构造函数,否则无法解析。

【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

经常用到 编写出来直接拿来用

这个适合在服务端结合servlet来做接口:需要下载jsoup+fastjson两个包.

Jsoup使用手册:http://www.open-open.com/jsoup/selector-syntax.htm

fastJson使用手册:https://www.w3cschool.cn/fastjson/fastjson-ex2.html
在这里我就不重复写了,看官方API最靠谱!

package com.zyzpp.jsoup;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.alibaba.fastjson.JSON;

public class JsoupTest {
    /**
     * Jsoup解析网页实例
     * 
     * @param i(页数)
     * @return
     */
    public static String getNew(int i) {
        String url = "http://www.cnmo.com/news/all_" + i + ".html";
        List<NewBean> list_bean = new ArrayList<>();
        NewBean newbean;
        try {
            Document doc = Jsoup.connect(url).get();
            // 获取class等于Newcon的div标签
            Element contents = doc.select("div.Newcon").first();
            Elements content = contents.getElementsByClass("Newcon-list");
            for (Element element : content) {
                Elements linka = element.getElementsByTag("a");
                String linkHref = linka.get(0).attr("href");
                String linkText = linka.get(0).text();
                Elements linkimg = element.getElementsByTag("img");
                String linkSrc = linkimg.get(0).attr("src");
                Elements linkp = element.getElementsByTag("p");
                String linktxt = linkp.get(0).text();
                // 这里把内部类修饰为static所以直接new
                newbean = new NewBean(linkText, linktxt, linkSrc, linkHref);
                list_bean.add(newbean);
            }
            // 使用了阿里的fastJson,其它json框架也可以,true是格式化
            String json = JSON.toJSONString(list_bean, true);
            return json;
        } catch (IOException e) {
            // e.printStackTrace();
            return null;
        }
    }
    /**
    *测试方法
    */
    public static void main(String[] args) {
        System.out.print(getNew(1));
    }

    public static class NewBean {
        private String title;
        private String content;
        private String imgUrl;
        private String urlA;

        public NewBean() {

        }

        public NewBean(String title, String content,
         String imgUrl, String urlA) {
            super();
            this.title = title;
            this.content = content;
            this.imgUrl = imgUrl;
            this.urlA = urlA;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

        public String getImgUrl() {
            return imgUrl;
        }

        public void setImgUrl(String imgUrl) {
            this.imgUrl = imgUrl;
        }

        public String getUrlA() {
            return urlA;
        }

        public void setUrlA(String urlA) {
            this.urlA = urlA;
        }

        @Override
        public String toString() {
            return "NewBean:[title=" + title + ", content=" + content + ", imgUrl=" + imgUrl + "urlA" + urlA + "]";
        }
    }

}

看着内部类写满了构造方法和getter setter方法,有没有觉得没有必要写了呢?答案是必须写,因为我们使用的是fastJson: 默认的构造函数一定要写,不然是无法解析的。

(对于fastjson 严格按照JavaBean的规范来,有一点不对就无法解析,这里一定要切记,每一个实体类的属性的get , set 方法必须写,且方法第四个字母必须大写,最好使用Eclipse的source->genreal setters and getters 生成get,set 方法,切记,切记 )。对于Gson 这里就没有这么多的要求了,但最好还是按照JavaBean来写,避免一些位置的错误。(参考http://blog.csdn.net/wx_962464/article/details/37612861


项目到这里就已经可以发布到服务器上了,但是我们在客户端还需要解析json数据,这里可以参考我写的另一篇博客

下面我只写一下拿到json字符串之后要做的事:

package com.zyzpp.jsoup;

import java.util.List;
import com.alibaba.fastjson.JSON;
import com.zyzpp.jsoup.JsoupTest.NewBean;

public class Demo {
    public static void main(String[] args) {
        String json = JsoupTest.getNew(1);
        List<NewBean> List = JSON.parseArray(json, NewBean.class);
        for (NewBean bean : List) {
            System.out.println(bean.toString());
        }
    }
}

这里我说一下fastjson的使用心得:

JSONArray:相当于List

JSONObject:相当于Map

//如果不把内部类修饰为static,这句不好通过:
List<NewBean> List = JSON.parseArray(json, NewBean.class);

版权声明

【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

Jsoup+FastJson制作新闻数据接口-Demo第1张

免责声明:文章转载自《Jsoup+FastJson制作新闻数据接口-Demo》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用StretchBlt之前一定要用SetStretchBltMode(COLORONCOLOR)Elasticsearch中文分词加拼音下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle 内置函数

oracle内置函数分为单行函数和聚合函数两大类 1、to_date 将字符转换为日期 select to_date('2008-08-08','yyyy-mm-dd') from dual; --2008/8/8 2.add_months 增加月份 select add_months(sysdate,2) from dual; --当前时间向后推2个月,...

fastJson与jackson性能对比

转载:https://blog.csdn.net/u013433821/article/details/82905222最近项目用到fastJson和jackson,为了决定到底弃用哪个,随手写了个测试看看到底谁的性能更胜一筹。 看到过很多对比的帖子,大多数结果是fastJson性能高于jackson,可偏偏像SpringMVC这样成熟的框架默认也采用的j...

C#多线程(一)

一、基本概念 1、进程 首先打开任务管理器,查看当前运行的进程: 从任务管理器里面可以看到当前所有正在运行的进程。那么究竟什么是进程呢? 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程...

这四种对象属性拷贝方式,你都知道吗?

当get/set太繁琐时;当BeanUtils无法拷贝集合时;当。。。可能,你需要好好看看这篇文章,文末附完整示例代码。 在做业务的时候,为了隔离变化,我们会将DAO查询出来的DO和对前端提供的DTO隔离开来。大概90%的时候,它们的结构都是类似的;但是我们很不喜欢写很多冗长的b.setF1(a.getF1())这样的代码,于是我们需要简化对象拷贝方式。...

Java 9 揭秘(19. 平台和JVM日志)

Tips做一个终身学习的人。 在这章中,主要介绍以下内容: 新的平台日志(logging)API JVM日志的命令行选项 JDK 9已经对平台类(JDK类)和JVM组件的日志系统进行了大整。 有一个新的API可以指定所选择的日志框架作为从平台类记录消息的日志后端。 还有一个新的命令行选项,可以从所有JVM组件访问消息。 在本章中,详细介绍两个记录工具...

Java用SAX解析XML

要解析的XML文件:myClass.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <class> 3 <stu id="001"> 4 <name>Allen</name> 5 <sex>男</sex> 6 &l...