CSDN博客下载器 CSDNBlogDownloader

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Geurney/article/details/48835721

CSDN Blog Downloader CSDN博客下载器

软件界面:

Version 2.0


Version 1.0

使用说明:

Version 2.0

下载用户:指定用户名和下载地址,下载即可。可导入/保存配置。

下载文章:输入文章链接,指定下载地址,下载即可。可导入/保存文章链接。

下线分类:输入分类链接,指定下载地址,下载即可。可导入/保存分类链接。


Version 1.0

输入用户名,指定下载到本地的地址,点击下载即可。

配置中可以保存当前的用户名和下载地址,保存为config.ini文件。读取用户配置则可以读取config.ini文件,填充用户名和下载地址。

软件架构

Crawler 爬虫用于爬取网页内容,按工作内容不同分为三种:

  • IndexCrawler 首页爬虫用于爬取用户博客首页(http://blog.csdn.net/geurney)内容,包括博客的基本信息(访问、积分、排名、原创、转载、译文和评论)、用户头像和文章分类。
  • CategoryCrawler 分类爬虫用于爬取一个文章分类下的所有文章链接。
  • BlogCrawler 博客爬虫用于爬取一篇文章的内容和图片,并保存到文件。
User 是用户类,用于控制爬取用户博客的流程。User 继承了SwingWorker类,使得下载过程可以在后台Work Thread运行,而不会导致GUI界面锁住。
Parser 用于处理爬取的网页内容,处理文章内容(去除广告等),使用正则表达式获取指定信息(文章分类,文章链接,图片地址等),生成格式化的索引。
Util 提供工具API,如图片下载,文件读写,打开文件浏览器,打开网页浏览器。
GUI 是程序界面。
icons 含有程序界面使用的图标图片。
jsoup 是用于爬虫建立网络链接的API包。

各类详解

Crawler类

Crawler 提供了以下成员:

  • document 用于存储爬取的网页内容
  • crawl(SimpleEntry<String, String> link) 爬取链接内容方法。link的定义使用了SImpleEntry的键值对,key是link的标题,value是link的url地址。
  • connect(String url) 建立网络链接方法。其中判断了status code(200)和content-type(text/html),最大尝试次数为20次,,尝试间隔为100ms。
IndexCrawlerr 首页爬虫在获得网页内容后,首先使用Parser的bloggerParser方法得到博客的基本信息,然后使用categoryParser方法得到文章分类信息并在本地以分类名建立目录,接着得到用户头像的图片地址并下载。

CategoryCrawler 分类爬虫根据文章分类网页爬取该类下的文章链接,如果网页内容含有关键字”下一页“则自动爬取下一页的内容。文章链接使用键值对存储,key是文章标题,value是文章链接。

BlogCrawler 博客爬虫得到网页内容,调用Parser的fileNameValify方法将文章标题合法化(可以作为文件名),然后使用docParser方法删减掉网页中不需要的内容,接着使用imageParser获取网页中的图片地址,并使用Util中的downloadImage方法将图片下载到本地。然后更新网页中的一些链接,并将图片链接指向本地地址,最后将网页输出为文件。

User类

User 提供了以下方法:

  • profile() 使用IndexCrawler爬取用户博客首页,得到博客信息、用户头像和文章分类信息。
  • crawl() 使用crawlCategory() 和crawlBlog() 方法依次爬取所有文章分类下的文章。
  • crawlCategory() 使用CategoryCrawler 爬取分类下的文章链接。
  • crawlBlog() 使用BlogCrawler爬取文章内容。
  • createIndex() 创建索引,包括博客信息,文章分类和文章链接。
  • doInBackground() 复写SwingWorker的方法,定义User的工作流程:1. profile()  2. crawl()  3. createIndex()

User 继承了SwingWorker类,可以在GUI的后台运行(调用doInBackground方法)。

GUI类

GUI实现了PropertyChangeListener接口,并通过User的addPropertyChangeListener方法注册给User作为Observer。
User通过firePropertyChange来告知GUI其状态的变化,GUI通过propertyChange来获取变化信息,并改变显示。


目前的设计里没有MVC中的controller。User是Model,GUI是View,以后可以加上controller调用User支持多用户提交。

考虑实现单博文下载。


展开阅读全文

没有更多推荐了,返回首页