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

这个适合在服务端结合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. WPF控件库:文字按钮的封装

    需求:封装按钮,按钮上面只显示文字.在鼠标移上去.鼠标点击按钮.以及将按钮设为不可用时按钮的背景色和前景色需要发生变化 实现:继承Button类,封装如下6个属性: #region 依赖属性 /// ...

  2. 爱奇艺、伤酷、乐视 vip 解析视频网站

    爱奇艺.伤酷.乐视 vip 解析视频网站 :http://www.nongshenghuo.com:805

  3. 关于正餐智能POS6.0.1.1改版后,订单模块无法进行部分退款的FAQ

    适用版本:智能POS正餐V6.0.1.1+ 适用情况:订单模块,无法输入自定义金额进行部分退款. 原因:为让报表统计的数据更准确. 改版之后仍可适用部分退款的情况: 1.口碑先付订单,可在口碑模块,选 ...

  4. 使用 pjsip 代码独立开发

    1.在不改动pjsip代码的情况下,和pjsip工程目录并行建立win32控制台程序工程P2PTraversal 目录结构如下: . ├── pjproject-2.6 └── pjsipdemo 2 ...

  5. 穷举,迭代,while循环

    1. 2.大马驼2石粮食,中等马驼1石粮食,两头小马驼1石粮食,要用100匹马,驼100石粮食,该如何分配? 3. 4. 5. 6.

  6. mssql sql语句过滤百分号的方法分享

    转自:http://www.maomao365.com/?p=6743 摘要: 下文讲述sql脚本中过滤百分号的方法: 实验环境:sql server 2008 R2  百分号:在sql脚本编写中“百 ...

  7. 洗礼灵魂,修炼python(68)--爬虫篇—番外篇之webbrowser模块

    题外话: 爬虫学到这里,我想你大部分的网站已经不再话下了对吧?有检测报文头的,我们可以伪造报文头为浏览器,有检测IP,我们可以用代理IP,有检测请求速度的,我们可以用time模块停顿一下,需要登录验证 ...

  8. scrapy入门:安装scrapy

    1.安装Scrapy pip 安装: pip install scrapy 要求pip至少是18.1版本的,10.x版本会提示更新pip 更新pip命令: python -m pip install ...

  9. 常用的几条sql语句

    ### 常用的几条sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,v ...

  10. February 27th, 2018 Week 9th Tuesday

    Great minds think alike. 英雄所见略同. If great minds really did think alike, then we would live in an unr ...