jsoup html解析器 实现对博客园博文标题链接抓取

朋友做毕业小项目,需求抓取博客部分内容。一开始我并不知jsoup.后来网上发现了jsoupApi,发现使用起来非常顺手。推荐大家使用。其中还有个小插曲。希望以后自己注意。

插曲内容:

    我打开chrome。审查源代码。但是发现无法精确定位到,我试着在同一个页面获取其他的信息,但是可以获取到。我就纳闷。又是根据class 又是根据ID,却总是失败告终。折腾了俩小时后。和我哥讨论这个问题,发现,其实那部分信息是js得到的。

代码内容:

package com.cb.getHtml;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
* @author bin
* date 11/25
*
*此处实现的是博客园的我的标签 和我的随笔 两部分的文章和href.
*getContents方法里面我只实现了对标签部分的抓取 要对随笔部分抓取 原理一样.
*/
public class GetHtml {

public static void main(String[] args) throws Exception {
  GetHtml.getContents(GetHtml.getKinds("http://www.cnblogs.com/hongten/archive/2011/05/14/2046005.html"));
}
public static Map getKinds(String url) throws Exception{
  String needUrl[] = url.split("/");
 
  String staticUrl = "http://www.cnblogs.com/random/mvc/blog/sidecolumn.aspx";
  staticUrl = staticUrl.replace("random", needUrl[3]);
  Document doc = Jsoup.connect(staticUrl).get();
  Elements es = doc.select(".catListTag li");//我的标签
  Elements es_1 = doc.select(".catListPostCategory li");// 随笔分类

      List tag = new ArrayList();
  List category = new ArrayList();

  for (Element obj : es) {
    Elements tmp = obj.select("a");
    Tag t = new Tag();
    t.setTitle(tmp.text());
    t.setUrl(tmp.attr("href"));
    tag.add(t);
  }

  for (Element obj : es_1) {
    Category c = new Category();
    Elements tmp = obj.select("a");
    c.setTitle(tmp.text());
    c.setUrl(tmp.attr("href"));
    category.add(c);
  }

  Map m = new HashMap();
    m.put("tag", tag);
    m.put("cate", category);
    return m;
  }

public static Map getContents(Map m) throws Exception{
  List tag = (List) m.get("tag");
  List cate = (List)m.get("cate");
  List tagList = new ArrayList<>();
  for (Object object : tag) {
    Tag t = (Tag) object;
    Document doc = Jsoup.connect(t.getUrl()).post();
    Elements es = doc.select(".PostList");
    List l = new ArrayList();
 
    for (int q = 0; q < es.size(); q++) {
      Element ele = es.get(q).getElementById("PostsList1_rpPosts_TitleUrl_"+q+"");
      Tag tmp = new Tag();
      tmp.setTitle(ele.text());
      tmp.setUrl(ele.attr("href"));
      l.add(tmp);
    }
    tagList.add(l);
  }

  Map m = new HashMap();

  m.put("tag", tagList);
  return m;
  }
}

积累知识,分享知识,学习知识。
原文地址:https://www.cnblogs.com/bin-pureLife/p/jsoup_html.html