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

这个适合在服务端结合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数据,这里可以参考我写的另一篇博客

http://blog.csdn.net/yueshutong123/article/details/78939083

下面我只写一下拿到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);

下载项目源代码:http://download.csdn.net/download/yueshutong123/10182732

end

Jsoup+FastJson制作新闻数据接口-Demo的更多相关文章

  1. 菜鸟笔记:node.js+mysql中将JSON数据构建为树(递归制作树状菜单数据接口)

    初学Web端开发,今天是第一次将所学做随笔记录,肯定存在多处欠妥,望大家海涵:若有不足,望大家批评指正. 进实验室后分配到的第一个项目,需要制作一个不确定层级树形菜单的数据接口,对于从来没实战编过程的 ...

  2. Asp.Net Core基于JWT认证的数据接口网关Demo

    近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求用Aps.Net Core做数据网关服务且基于JWT认证实现对 ...

  3. 开放数据接口 API 简介与使用场景、调用方法

    此文章对开放数据接口 API 进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用. 在给大家分享的一系列软件开发视频课程中,以及在我们的社区微信群聊天中,都积极地鼓励大家开 ...

  4. spring boot (二):使用fastJson解析json数据

    如果我们想在spring boot中使用第三方的json解析框架: 1)我们需要在pom.xml文件中引入第三方包的依赖; 2)实现方法: 方法1 需要在启动类中继承WebMvcConfigurerA ...

  5. 基于Thinkphp5+phpQuery 网络爬虫抓取数据接口,统一输出接口数据api

    TP5_Splider 一个基于Thinkphp5+phpQuery 网络爬虫抓取数据接口 统一输出接口数据api.适合正在学习Vue,AngularJs框架学习 开发demo,需要接口并保证接口不跨 ...

  6. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  7. 关于cordova+vue打包apk文件无法访问数据接口

    作为一个cordova小白,我按照官方文档和网上资料完成了讲vue文件打包到cordova中并打包成apk文件,完成了一个简单app的制作,当我正陶醉于可以自己完成一个app的时候突然发现,我的app ...

  8. Spring使用fastjson处理json数据

    1.搭建SpringMVC+spring环境 2.配置web.xml以及springmvc-config.xml,web.xml同Spring使用jackson处理json数据一样,Springmvc ...

  9. Spring Boot返回json数据及完美使用FastJson解析Json数据

     Spring Boot返回json数据 视频地址:http://www.iqiyi.com/w_19rubxzsr5.html 博文参考:https://blog.csdn.net/linxingl ...

随机推荐

  1. Java:字节流和字符流(输入流和输出流)

    本文内容: 什么是流 字节流 字符流 首发日期:2018-07-24 什么是流 流是个抽象的概念,是对输入输出设备的抽象,输入流可以看作一个输入通道,输出流可以看作一个输出通道. 输入流是相对程序而言 ...

  2. 2019年Web前端最新导航(常见前端框架、前端大牛)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 前言 本文列出了很多与前端有关的常见网站.博客.工具等,整体来看比较权威.有些东西已经 ...

  3. SQL server 导出平面文件时出错: The code page on Destination - 3_txt.Inputs[Flat File Destination Input].Columns[UserId] is 936 and is required to be 1252.

    我在导出平面文件时:Error 0xc00470d4: Data Flow Task 1: The code page on Destination - 3_txt.Inputs[Flat File ...

  4. 服务器CPU繁忙或内存压力引起网络掉包的浅析与总结

      最近一段时间遇到了两起有意思的故障,现象都是网络掉包或网络断开,不过这些只是表面现象,引起现象出现的本质才是我们需要关注的重点: 案例1: 平台   :VMware平台 操作系统 :Windows ...

  5. Oracle EBS compile PLD PLL files.

    PLL->PLX:frmcmp_batch module_type=library userid=apps/apps module=$1.pll output_file=$1.plx compi ...

  6. ELK环境配置+log4j日志记录

    ELK环境配置+log4j日志记录 1. 背景介绍 在大数据时代,日志记录和管理变得尤为重要. 以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦, 想根据一 ...

  7. SQL Server 锁实验(INSERT加锁探究)

    insert语句: 其上锁情况为: insert语句会对表上的所有索引作出更新,因此这里看到的索引列较多,我们先把所有的索引搞出来看看: 可以看到所有索引都涉及到了,然后我们来仔细分析下加锁情况: 1 ...

  8. PHP中Snoopy类的使用

    最近看PHP书籍,发现了一个好东东,就是Snoopy类.Snoopy是一个php类库,用来模拟浏览器的功能,可以获取网页内容,发送表单. Snoopy的一些特点: 1抓取网页的内容 fetch 2 抓 ...

  9. JavaScript -- 时光流逝(三):js中的 String 对象的方法

    JavaScript -- 知识点回顾篇(三):js中的 String 对象的方法 (1) anchor(): 创建 HTML 锚. <script type="text/javasc ...

  10. Java反射机制小结和实际操作

    一.什么是反射 1.编译和运行 在了解什么是Java反射机制前,先聊聊Java的编译和运行. 还记得第一次使用记事本编写第一个Java程序的场景吗?通过命令窗口,使用javac命令编译一个.java文 ...