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;
      }
    }

    积累知识,分享知识,学习知识。
  • 相关阅读:
    协程,纤程(Fiber),或者绿色线程(GreenThread)
    好用的 Chrome 插件
    内存泄露
    Serilog 是 ASP.NET Core 的一个插件,可以简化日志记录
    ES6-类(Class)
    规范-Git打标签与版本控制
    必会必知git
    Ubuntu 16.04安装CrossOver容器来安装QQ(终极解决办法,亲测有效)
    Ubuntu 16.04安装UML工具StarUML 2
    Ubuntu 16.04升级4.7.0内核后导致Compiz奔溃,问题:compiz[4852]: segfault at 48 ip 00007f88cae087f0 sp 00007ffce354c268 error 4 in libscale.so
  • 原文地址:https://www.cnblogs.com/bin-pureLife/p/jsoup_html.html
Copyright © 2011-2022 走看看