[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方法

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

设置站点对象

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

起始链接

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

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

创建爬虫

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

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

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

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

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

设置遍历深度及结束条件

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

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

运行结果

代码地址

https://github.com/zlzforever/DotnetSpider  望各位大佬加星 :)

参与开发或有疑问

QQ群: 477731655

邮箱: zlzforever@163.com

 

[开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [五] 如何做全站采集?的更多相关文章

  1. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 为什么要造轮子 同学们可以去各大招聘网站查看一下爬虫工程师 ...

  2. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [二] 基本使用

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 使用环境 Visual Studio 2017 .NET ...

  3. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [四] JSON数据解析

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 场景模拟 接上一篇, JD SKU对应的店铺信息是异步加载 ...

  4. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 上一篇介绍的基本的使用方式,自由度很高,但是编写的代码相对 ...

  5. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] 学习

    http://www.cnblogs.com/jjg0519/p/6707513.html

  6. [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 为什么要造轮子 同学们可以去各大招聘网站查看一下爬虫工程师的要求,大多是招JA ...

  7. [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [二] 基本使用

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 使用环境 Visual Studio 2015 or later .NET 4 ...

  8. [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 上一篇介绍的基本的使用方式,虽然自由度很高,但是编写的代码相对还是挺多.于是框 ...

  9. [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [四] JSON数据解析

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 场景模拟 假设由于漏存JD SKU对应的店铺信息.这时我们需要重新完全采集所有 ...

随机推荐

  1. go 实现简单的加权分配

    最近一段时间接手了一个golang编写的模块,从python转到golang这种静态语言还是有些不适应的,接手模块后的第一个需求是实现一个加权分配的方法. 简单来说数据库中存有3个链接,3个链接的权重 ...

  2. nginx 配置简单网站项目(linux下)

    1.新建html2与html3两个网站项目测试,而html是本身就有,记得到/etc/hosts 添加dns记录 2.修改nginx.conf文件 3.测试访问 中间用到一些nginx的命令,就不截图 ...

  3. Python之逻辑回归

    代码: import numpy as np from sklearn import datasets from sklearn.linear_model import LogisticRegress ...

  4. 【PAT】B1001 害死人不偿命的(3n+1)猜想

    超级简单题 偶数砍掉一半, 奇数乘三加一砍掉一半 #include<stdio.h> int mian(){ int n,step=0; scanf("%d",n); ...

  5. Linux 小知识翻译 - 「packet」(网络数据包)

    用手机接收邮件或者访问网页的时候,一般会说有「packet费用」(这是日本的说法,在中国好像一般都说 “流量费”),即使对网络不太熟悉的人也知道「packet」这个词(这里也是日本的情况). 那么,「 ...

  6. 泰泽智能电视(Tizen smart TV)问世

        6月2日至4日,泰泽开发人员大会(TDC)在美国洛杉矶举行,会上韓国三星公司展出了一台泰泽智能电视(原型机).        智能电视(Smart TV not to be confused ...

  7. VC++界面编程之--仿Facebook透明登录窗体

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/renstarone/article/details/27642765 1. 开发工具:VC++ DU ...

  8. 2017-2018-2 20155314《网络对抗技术》Exp2 后门原理与实践

    2017-2018-2 20155314<网络对抗技术>Exp2 后门原理与实践 目录 实验要求 实验内容 实验环境 预备知识 1.后门概念 2.常用后门工具 实验步骤 1 用nc或net ...

  9. MetaMask/metamask-inpage-provider

    https://github.com/MetaMask/metamask-inpage-provider Used to initialize the inpage ethereum provider ...

  10. druid监控配置

    druid相对于传统的c3p0和dbcp及其dbcp2等多个很多新特性 可以在线监控数据库及其表和sql以及Controller的requestMapping和对应的业务方面请求和session等 是 ...