打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [五] 如何做全站采集?

[DotnetSpider 系列目录]



如何做全站采集?


很多同学加群都在问, 如何使用DotnetSpider做全站采集呢? 其实很简单, 只要你们想通爬虫的整个逻辑就能明白了。简而言之,步骤如下:


1. 使用指定URL下载HTML


2. 分析, 保存HTML数据


3. 从HTML中分析出符合规则的新的URL, 并用新URL重复 1,2,3步骤, 直到再也无法发现新的URL


逻辑是简单的, 但其中涉及到的细节不少,如多线程、URL去重、遍历深度等, 但是不用担心, 这些也正是框架应该去做的事情, 大家只需要关注业务逻辑就好。


 


下载代码


https://github.com/zlzforever/DotnetSpider


请下载代码后, 找到DotnetSpider.Sample里的BaseUsage.cs中的CrawlerPagesTraversal方法




        public static void CrawlerPagesTraversal()        {            // Config encoding, header, cookie, proxy etc... 定义采集的 Site 对象, 设置 Header、Cookie、代理等            var site = new Site { EncodingName = "UTF-8", RemoveOutboundLinks = true };            // Set start/seed url            site.AddStartUrl("http://www.cnblogs.com/");            Spider spider = Spider.Create(site,                // crawler identity                "cnblogs_" + DateTime.Now.ToString("yyyyMMddhhmmss"),                // use memoery queue scheduler                new QueueDuplicateRemovedScheduler(),                // default page processor will save whole html, and extract urls to target urls via regex                new DefaultPageProcessor("cnblogs\\.com"))                // save crawler result to file in the folder: \{running directory}\data\{crawler identity}\{guid}.dsd                .AddPipeline(new FilePipeline())                // dowload html by http client                .SetDownloader(new HttpClientDownloader())                // 4 threads 4线程                .SetThreadNum(4);            // traversal deep 遍历深度            spider.Deep = 3;            // stop crawler if it can't get url from the scheduler after 30000 ms 当爬虫连续30秒无法从调度中心取得需要采集的链接时结束.            spider.EmptySleepTime = 30000;            // start crawler 启动爬虫            spider.Run();        }



 


设置站点对象


Site对象是用来设置对采集对象统一使用的配置, 如Encoding, Cookie, Proxy, 页面是否压缩等等, 一般大家可以直接使用默认值就可以了, 除非发现数据采集异常, 再去尝试修正


起始链接


采集一个站点, 当然需要一个入口,这个入口一般可以是网站首页。当然如果你们要从某个类别等进入,甚至是多个入口都是可以的。调用AddStartUrl添加就可以了



            site.AddStartUrl("http://www.cnblogs.com/");


创建爬虫




            Spider spider = Spider.Create(site,                // crawler identity                "cnblogs_" + DateTime.Now.ToString("yyyyMMddhhmmss"),                // use memoery queue scheduler                new QueueDuplicateRemovedScheduler(),                // default page processor will save whole html, and extract urls to target urls via regex                new DefaultPageProcessor("cnblogs\\.com"))                // save crawler result to file in the folder: \{running directory}\data\{crawler identity}\{guid}.dsd                .AddPipeline(new FilePipeline())                // dowload html by http client                .SetDownloader(new HttpClientDownloader())                // 4 threads 4线程                .SetThreadNum(4);



如上代码, 调用静态方法Spider.Create(有多个重载), 给的参数是站点对象、采集任务标识、调度队列(如果引用了DotnetSpider.Extension可以使用Redis做队列实现分布式采集)


DefaultPageProcessor: 构造参数是一个正则表达式, 用此正则来筛选需要采集的URL


FilePipeline: 默认实现的文件存储HTML信息, 大家可以自行实现IPipeline传入


HttpClientDownloader: 默认实现的Http下载器, 仅用于下载HTML


 


设置遍历深度及结束条件



            // traversal deep 遍历深度            spider.Deep = 3;            // stop crawler if it can't get url from the scheduler after 30000 ms 当爬虫连续30秒无法从调度中心取得需要采集的链接时结束.            spider.EmptySleepTime = 30000;


 


EmptySleepTime是指当爬虫多久发现不了新的URL时就结束。


 


运行结果




 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python并发编程:Python实现生产者消费者爬虫
【下篇】Python下用Scrapy和MongoDB构建爬虫系统
小白学 Python 爬虫(34):爬虫框架 Scrapy 入门基础(二)
scrapy
500 行 Python 代码构建一个轻量级爬虫框架
网络爬虫知识教你“爬”遍各种网络
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服