博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(1)
阅读量:4566 次
发布时间:2019-06-08

本文共 1473 字,大约阅读时间需要 4 分钟。

NCrawler 是一款 .net 上的开源爬虫,虽然它没有arachnode.net那么成熟完善,但是代码量小,设计结构好,很适合大家研读。

在NCrawler.Demo项目下的Program.cs文件中,找到Main函数

函数开头的一段代码,是打开HTTP协议的限制(对同一个WEB最多同时发起两个连接的限制)

ServicePointManager.MaxServicePoints = 999999;ServicePointManager.DefaultConnectionLimit = 999999;ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;ServicePointManager.CheckCertificateRevocationList = true;ServicePointManager.EnableDnsRoundRobin = true;

紧接着代码进入一个demo的RUN() 函数:

SimpleCrawlDemo.Run();

该demo首先创建了一个Crawler对象,构造函数的第一个参数是初始爬的URL,后面的参数是一系列输出的管道,以后讲。

然后程序执行Crawl()函数开始爬行。

using (Crawler c = new Crawler(new Uri("http://ncrawler.codeplex.com"),				new HtmlDocumentProcessor(), // Process html				new iTextSharpPdfProcessor.iTextSharpPdfProcessor(), // Add PDF text extraction				new GoogleLanguageDetection(), // Add language detection				new Mp3FileProcessor(), // Add language detection				new DumperStep())				{					// Custom step to visualize crawl					MaximumThreadCount = 2,					MaximumCrawlDepth = 10,					ExcludeFilter = Program.ExtensionsToSkip,				})			{				// Begin crawl				c.Crawl();			}

这个函数完成了一系列配置,最后将URL添加到一个等待下载解析的URL序列m_CrawlerQueue中。代码如下:

AddStep(m_BaseUri, 0);
第二个参数0表示初始深度,此时程序进入一个循环直到爬取到设定的深度为止。

在Crawl()函数中有一个专门用来处理 m_CrawlerQueue 的函数叫ProcessQueue()这个函数有一个重要的循环:

while (ThreadsInUse < MaximumThreadCount && WaitingQueueLength > 0)			{				StartDownload();			}
在StartDownload()函数的内部就是启用了线程池技术,下载网页并解析。并且在线程完成后回调,继续处理序列.

 

转载于:https://www.cnblogs.com/rav009/p/5131146.html

你可能感兴趣的文章
js编写简单的贪吃蛇游戏
查看>>
2018/12/01 一个64位操作系统的实现 第四章 导入kernel.bin(4)
查看>>
如何在windows xp professional安装iis的解决方法
查看>>
抽象类和接口
查看>>
使用ASP.NET Atlas AutoComplete Behavior或AutoComplete Extender实现自动完成功能(下)
查看>>
golang 常见疑惑总结
查看>>
8大你不得不知的Android调试工具
查看>>
pc端元素拖拽
查看>>
Sublime Text3使用Package Control 报错There Are No Packages Available For Installation
查看>>
判断连通图是否有环(并查集)
查看>>
汽车之家面试题2016
查看>>
POJ-数据结构-优先队列模板
查看>>
【HAOI2006】旅行(并查集暴力)
查看>>
css实现文本超出部分省略号显示
查看>>
留言板
查看>>
vue-router组件状态刷新消失的问题
查看>>
Android UI开发第十四篇——可以移动的悬浮框
查看>>
java8的一些用法
查看>>
(十)Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
查看>>
2018-11-19站立会议内容
查看>>