Jsoup+FastJson製做新聞數據接口-Demo

常常用到 編寫出來直接拿來用
這個適合在服務端結合servlet來作接口:須要下載jsoup+fastjson兩個包
Jsoup使用手冊:http://www.open-open.com/jsoup/selector-syntax.htm
fastJson使用手冊:https://www.w3cschool.cn/fastjson/fastjson-ex2.html
在這裏我就不重複寫了,看官方API最靠譜!php

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: 默認的構造函數必定要寫,否則是沒法解析的。html

(對於fastjson 嚴格按照JavaBean的規範來,有一點不對就沒法解析,這裏必定要切記,每個實體類的屬性的get , set 方法必須寫,且方法第四個字母必須大寫,最好使用Eclipse的source->genreal setters and getters 生成get,set 方法,切記,切記 )。對於Gson 這裏就沒有這麼多的要求了,但最好仍是按照JavaBean來寫,避免一些位置的錯誤。(參考http://blog.csdn.net/wx_962464/article/details/37612861java


項目到這裏就已經能夠發佈到服務器上了,可是咱們在客戶端還須要解析json數據,這裏能夠參考我寫的另外一篇博客
http://blog.csdn.net/yueshutong123/article/details/78939083
下面我只寫一下拿到json字符串以後要作的事:node

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:至關於Mapjson

//若是不把內部類修飾爲static,這句很差經過:
List<NewBean> List = JSON.parseArray(json, NewBean.class);

下載項目源代碼:http://download.csdn.net/download/yueshutong123/10182732服務器

end框架

相關文章
相關標籤/搜索