朋友做毕业小项目,需求抓取博客部分内容。一开始我并不知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;
}
}