zoukankan      html  css  js  c++  java
  • 使用CHM文档 采集随笔(续)

    背景

      上篇说到我们可以将自己的博客内随笔/文章/日记备份得到的xml 转换成CHM文档,如果我们希望将某个大牛的博客随笔全部导出,这个能不能实现呢?写在这里算是废话了,既然有了这篇博客,那么这个问题,一定是可以解决的。

    资源下载

      可执行程序

      源代码

      示例文档截图(路过秋天):

          

    开发思路

      1.根据博客园ID得到随笔类别,如地址为 http://www.cnblogs.com/cyq1162/,则博客园ID为cyq1162,请求页面http://www.cnblogs.com/cyq1162/mvc/blog/sidecolumn.aspx。请求结果如下:

         

      通过正则匹配到该页面的链接,以某个链接为例,http://www.cnblogs.com/cyq1162/category/268820.html,其中包含cyq1162/category,基于这样的规则,我们可以得到所有的随笔分类链接。

      2.得到随笔分类链接之后,则请求该链接的内容,得到该随笔下的所有文章链接。文章链接,以某个链接为例,http://www.cnblogs.com/cyq1162/archive/2013/03/17/2964746.html,其中包含cyq1162/archive,基于这样的规则,我们可以得到所有的文章链接。

      3.得到文章的链接,这样就能得到文章正文。我们要获取的有文章标题、文章正文、发布时间。这里没有去尝试获取文章作者,不好获取。前面指的需要获取的3个内容,在某个明确id的节点里。这里使用了HtmlAgilityPack进行HTML解析,感觉非常方便,可以直接根据ID得到元素,然后获取它的内容。解析代码如下:

                                //下载随笔内容 替换后保存本地
                                var contentCode = GetContent(articleUrl);//获取随笔内容
                                HtmlDocument htmlCode = new HtmlDocument();
                                htmlCode.LoadHtml(contentCode);
                                var titleNode = htmlCode.GetElementbyId("cb_post_title_url");
                                var postBody = htmlCode.GetElementbyId("cnblogs_post_body");
                                var postDate = htmlCode.GetElementbyId("post-date");
                                //var topics = htmlCode.GetElementbyId("topics");
                                var localHtml = template
                           .Replace("{channelTitle}", titleNode.InnerText)//博文标题
                           .Replace("{preContent}", DownImage(postBody.InnerHtml))//博文内容
                           .Replace("{channelHref}", titleNode.GetAttributeValue("href", "#"))//博文地址
                           .Replace("{channelLink}", userId + ".cnblogs.com")//博客地址
                           .Replace("{channelAuthor}", userId);//博文作者

      4.下一步则是编译CHM了,这里就不重复介绍了。

      其中参考啊汉的博文 《一键构造你的博客目录》 构造了随笔目录。

      代码逻辑就这么多,比较简单,希望大伙喜欢。如果设置首页不显示随笔分类的话,是无法采集的,若是博客引用了自定义样式,需要手动添加该样式在。有其他的问题,可以向我反馈,也可以自己下载代码调试看看。

  • 相关阅读:
    CodeForces 706C Hard problem
    CodeForces 706A Beru-taxi
    CodeForces 706B Interesting drink
    CodeForces 706E Working routine
    CodeForces 706D Vasiliy's Multiset
    CodeForces 703B Mishka and trip
    CodeForces 703C Chris and Road
    POJ 1835 宇航员
    HDU 4907 Task schedule
    HDU 4911 Inversion
  • 原文地址:https://www.cnblogs.com/codealone/p/3037780.html
Copyright © 2011-2022 走看看