博客园博客下载工具,可以主动搜索某人的blog,并以MHTML格式保存到本地文件夹脱机浏览。...

1:输入某人的BLOG,例如http://www.cnblogs.com/JeffreyZhao/

2:任意打开一篇博客文章,例如:http://www.cnblogs.com/JeffreyZhao/archive/2010/03/21/async-and-parallel-design-patterns-in-fsharp-3-more-agents.html

3:我们看到了博客文章的url格式大致是,http://www.cnblogs.com/JeffreyZhao/+%22archive"+年+月+日+文章标题+".html"

4:OK,我们输入http://www.cnblogs.com/JeffreyZhao/archive/2010/03.html。发现显示的是随笔档案 - 2010年3月。这就意味着我们可以通过更改年月来得到相应的年月的随笔档案。

5:我们从2005年01月一直搜索到2010年12月.构造我们需要搜索的地址列表。储存到httpCategoryUrls这样的List<string>.

ExpandedBlockStart.gif 代码
  for  ( int  i  =   2005 ; i  <   2011 ; i ++ )
 {
   
for  ( int  j  =   1 ; j  <   13 ; j ++ )
      {
         httpCategoryUrls.Add(textBox1.Text.ToString() 
+   " archive/ "   +  i  +   " / "   +
                               (j 
<   10   ?  ( " 0 "   +  j).ToString() : j.ToString())  + " .html " );
       }
  }

 6:逐个解析我们的httpCategoryUrls里面的url,采用foreach进行遍历。

 

ExpandedBlockStart.gif 代码
            foreach  ( string  rurl  in  httpCategoryUrls)
            {
                url myurl;
                Http myhttp 
=   new  Http();
                Spider myspider 
=   new  Spider();
                
try
                {
                    myurl 
=   new  url(rurl);
                    Uri burl 
=   new  Uri(rurl);
                    myspider.ProsessPage(myhttp.GetPage(burl));
                }
                
catch
                { 
return   false ; }

                
while  (myspider.outurl.Count  >   0 )
                {
                    
string  urlValue  =  myspider.outurl.Dequeue().ToString();

                    
if  ( ! httpArticleUrls.Contains(urlValue)  &&  urlValue.Contains( " archive " )
                        
&&  urlValue.EndsWith( " .html " )
                        
&&  Path.GetFileName(urlValue).Length  >   9
                        )
                    {
                        httpArticleUrls.Add(urlValue);
                    }
                }

            }

 

其中随便找了个网上的spider组件,可以解析html得到html中的所有链接信息。

因为我们知道文章的url中包含"archive",并且url以.html结尾,

为了防止http://www.cnblogs.com/JeffreyZhao/archive/2010/03.html,这样的连接,我做了Length检查。

通过上述基本的几个步骤大致可以得到某人某年某月的随笔档案。全部保存到httpArticleUrls的List<string>中。

 

7:已经得到了某人的从2005年到2010年之间的所有文章了,剩下的就是发送Http请求去获取数据,然后本地保存了。

保存采用的是CDOMessage这样的类,该类可以生成MHTML格式的文档。代码如下:

 

 

ExpandedBlockStart.gif 代码
  foreach  ( string  str  in  httpArticleUrls)
            {
                CDO.Message message 
=   new  CDO.MessageClass();
                message.MimeFormatted 
=   true ;
                message.CreateMHTMLBody(str, CDO.CdoMHTMLFlags.cdoSuppressNone, 
"" "" );
                ADODB.Stream stream 
=  message.GetStream();

                
int  startIndex  =  message.HTMLBody.IndexOf( " <title> " , StringComparison.CurrentCultureIgnoreCase);
                
int  endIndex  =  message.HTMLBody.IndexOf( " </title> " , StringComparison.CurrentCultureIgnoreCase);

                
string  fileName  = FilePath +   " \\1.mht " ;

                
try
                {
                    Char[] chars 
=  Path.GetInvalidFileNameChars();

                    
string  name  =  message.HTMLBody.Substring(startIndex  +   7 , endIndex  -  startIndex  -   7 );
                    
foreach  ( char  c  in  chars)
                    {
                        name 
=  name.Replace(c.ToString(),  string .Empty);
                    }

                    fileName 
=  FilePath + " \\ "   +
                        name
                        
+   " .mht " ;
                }
                
catch
                { }

                stream.SaveToFile(fileName, ADODB.SaveOptionsEnum.adSaveCreateOverWrite);

                stream.Close();

            }

 

 文章的以文章的标题为名字进行保存。如果文章的名称中包含非法的字符,进行替换。

CDO.CdoMHTMLFlags.cdoSuppressNone:代表不进行压缩。这样图片可以嵌入其中。

 

8:大致功能已经实现,但是代码还有很多地方可以优化的,名称命名等都可以进行修改下,速度,效率啊目前都还没考虑,没有自动下载附件的功能,需要的话其实也挺简单的,得到所有文章中的压缩文件,通过WebClient.DownLoadFile方法下载等。

9:附件下载:BlogDownLoader.rar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本程序用java编写,运行的时候需要JDK1.5或以上环境,无需安装。程序通过分析园博 源码来生成一些必要的数据,可能在以后使用当中出现爬取不了的情况,可能是园的源码 结构修改了。程序只是用于学习之用,严禁用于非法目的而照成园服务器过载。 由于生成PDF的时候需要依赖字库,所以在打包程序的时候把一些必要的字库已经放到程序中 去了。可能在生成一些PDF文件的时候出现乱码问题,那是因为里面缺少需要的字库,如遇到这 个问题,请和本人联系:wyphao.2007@163com fonts文件夹是生成pdf文件依赖的字体库,如果生成的pdf文件是乱码,说明缺少相关的字体。 #################################################### 程序功能: 1、支持输入园博用户名针对性下载 2、支持选择保存下载的文件 保存的结构目录为: 选择的保存路径\园用户名\pdf 生成的PDF文件保存路径 选择的保存路径\园用户名\doc 生成的DOC文件保存路径 选择的保存路径\园用户名\txt 生成的TXT文件保存路径 3、支持获取用户信息 4、支持显示用户所有的帖子列表 5、可以自己选择需要下载的帖子,有全选、反选、重置按钮 6、支持下载的文件保存为 pdf、doc、txt三种格式 7、生成的pdf、doc文件支持图片 8、支持进度显示 #################################################### 制作时间:2012年07月21日 - 2012年07月21日 制 作:w397090770 个人:http://blog.csdn.net/w397090770 Email :wyphao.2007@163.com 版权所有,翻版不究 ####################################################
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值