zoukankan      html  css  js  c++  java
  • 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;
      }
    }

    积累知识,分享知识,学习知识。
  • 相关阅读:
    转: requirejs压缩打包r.js使用示例 2 (~~很详细的教程)
    转:requirejs打包压缩r.js使用示例
    转: RequireJS Optimizer 的使用和配置方法
    转:requirejs:让人迷惑的路径解析(~~不错)
    转: requirejs中文api (详细)
    转: 让html5标签在ie8及以下的被正确解析的解决方案
    浏览器对body节点scrollTop解析的差异
    vue全局配置
    vue watch 深度监听以及立即监听
    Vue插件
  • 原文地址:https://www.cnblogs.com/bin-pureLife/p/jsoup_html.html
Copyright © 2011-2022 走看看