常常用到 編寫出來直接拿來用
這個適合在服務端結合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/37612861)java
項目到這裏就已經能夠發佈到服務器上了,可是咱們在客戶端還須要解析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框架