中文線上手冊
下載地址
jsoup是java的一款html解析器,可以很方便的對html進行解析。
1.擷取標題:
public class TestJsoup {public static void main(String[] args) {Document doc;try {// 擷取文檔doc = Jsoup.connect("http://news.ifeng.com/").get();// 擷取bodyElement content = doc.body();// 標籤集合,是每頁的標題和連結Elements divs = content.select("div");for (int i = 0; i < divs.size(); i++) {// 今日要聞if ("box_02".equals(divs.get(i).attributes().get("class"))) {Elements titles = divs.get(i).select("a");for (Element title : titles) {if (""!=title.text()) {System.out.println(title.text());//連結system.out.printlin(title.select("a").attr("href");); }}}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
結果:
2.擷取新聞內容:
public static void main(String[] args) {Document doc;try {// 擷取文檔doc = Jsoup.connect("http://news.ifeng.com/world/special/malaixiyakejishilian/content-4/detail_2014_03/30/35274873_0.shtml").get();// 擷取bodyElement content = doc.getElementById("main_content");// 標籤集合,是每頁的標題和連結Elements divs = content.select("p");for (Element ele : divs) {// 假如標籤是圖片地址if ("detailPic".equals(ele.attributes().get("class"))) {System.out.println(ele.select("img").attr("src"));} else {System.out.println(ele.text() + "\n");}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
結果:
3.擷取video資訊:
這是某個新聞的影像訊息,我們需要解析script裡面的參數資訊。
// videos = p.select("script");if (!s.isEmpty()) {// 將參數列錶轉為文本String data = s.first().data();data = data.replaceAll("var", "");String[] arr;// arr= data.split("',");// for (int i = 0; i < arr.length; i++) {// String str = arr[i];// str = str.replaceAll("flash_[\\S]{0,} = '", "");// System.out.println(str.trim());// }arr = data.split(",");for (String str : arr) {String[] ir = str.split("=");System.out.println(ir[0].trim() + ";" + ir[1].trim());}}
結果:
完整的例子:
public class Artcle {private String artLink;private Document Doc;private Element ele;private Elements eles;// "http://news.qq.com/a/20141001/018175.htm?tu_biz=1.114.2.1"public Artcle(String str) {this.artLink = str;}public Document getDoc(String web) {Document doc = null;try {doc = Jsoup.connect(web).get();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();return null;}return doc;}public void getArtcle() {if (null == (Doc = getDoc(artLink))) {return;}ele = Doc.select("div#Cnt-Main-Article-QQ").first();eles = ele.select("p");for (Element p : eles) {Elements s = null;// videos = p.select("script");if (!s.isEmpty()) {// 將參數列錶轉為文本String data = s.first().data();data = data.replaceAll("var", "");String[] arr;// arr= data.split("',");// for (int i = 0; i < arr.length; i++) {// String str = arr[i];// str = str.replaceAll("flash_[\\S]{0,} = '", "");// System.out.println(str.trim());// }arr = data.split(",");for (String str : arr) {String[] ir = str.split("=");System.out.println(ir[0].trim() + ";" + ir[1].trim());}}}}}
注意:
1.使用的方法還是很簡單的,在有時候解析網頁的時候會拋出io異常,自己注意就是了。
2.// 將參數列錶轉為文本
String data = s.first().data();
很重要的方法,將script中的參數列錶轉為字串格式,然後我們通過對字串的裁剪等操作,就可以得到需要的資訊。