梦想这东西和经典一样,不会因为时间而褪色,反而更显珍贵

C# 网络爬虫(二):并发异步制作爬虫

2017-3-2 11:24:56 · 1180次浏览

本次发布的主题:

C# 4.5并发编程-图片爬虫二

C#网络爬虫(二):多线程制作图片爬虫

.NET 4.5编程实例,制作图片爬虫


距离上一次发布的C#多线程图片爬虫正好一年多,看了评论后有一些同学说不太明白这个代码的结构不清晰,这一次对上一次的版本核心代码进行一个优化重写,部分代码重构。



总计上一个版本的问题:


1.类的耦合太强,所有的代码都集中在Form的类中。

2.下载和分析耦合在一起后,分析的任务异常会影响到下载任务的正常执行

3.逻辑不清晰,代码也会变的很乱。

4.并行任务中锁住(List集合)效率会变得很差。

5.过多层递归导致System.StackOverflowException异常

上一版的博文我也不删了,大家可以前后对比下。

当然我能不能去爬取别的内容?不只是下载图片,当然可以,你可以根据你想要的配置去修改DownloadHelper.cs中的下载方法。



讲一讲我的设计思路


请大家看下流程图:


C# 并发编程制作图片爬虫——来自Lorna的个人网站。黄鑫,一个20岁的前端工程师,爱生活,爱记录。聆听一切美妙,做一个快乐的人。

系统主要分为下面几大块,相信聪明的你看了流程图就明白了:

1.分析器(AnalysisBehaviorBusiness

分析器,创建Task异步去分析已有的链接,分析图片URL,根据URL不停去异步分析。

2.下载器(CrawlerBehaviorBusiness

和分析器唯一存在关系的行为就是图片队列。根据图片队列去创建Task异步下载

3.任务管理器(TaskSupervisor

根据用户设置的Task最大量去创建管理Task。

4.队列

解决并发下的线程安全问题,这边使用队列(Queue)。


先行版.rar

exe 打包,大家可以先试一下。看代码之前,先看个效果图:

先行版.rarC# 并发编程制作图片爬虫——来自Lorna的个人网站。黄鑫,一个20岁的前端工程师,爱生活,爱记录。聆听一切美妙,做一个快乐的人。


源码已经上传至GitHub,网页链接:https://github.com/lorna1/SuperImageAraneid  

如果你觉得好,帮我在右上角点个star。

写在最后

1.本文涉及到的特性和代码依赖.net framework 4.5,如果你还不了解并行编程的新特性,建议阅读《C#并发编程实例

2.如果你不明白C#队列的使用建议阅读:http://www.runoob.com/csharp/csharp-queue.html

3.如果你觉得以上代码及说明存在问题或者可以改进的地方,请留言告诉我,非常感谢!


与本文相关的文章推荐