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

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

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

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

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

设置遍历深度及结束条件

            // traversal deep 遍历深度
spider.Deep = ; // stop crawler if it can't get url from the scheduler after 30000 ms 当爬虫连续30秒无法从调度中心取得需要采集的链接时结束.
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. JavaScript大杂烩6 - 理解JavaScript中的this

    在JavaScript开发中,this是很常用的一个关键字,但同时也是一个很容易引入bug的一个关键字,在这里我们就专门总结一下页面中可能出现的this关键字(包括几种在其他页面文件中出现的this) ...

  2. Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)

    Django中ORM介绍和字段及字段参数   Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...

  3. docker常用命令整理-在容器中使用service命令

    在docker中使用centos镜像启动了容器并安装了相关软件,之后想用service命令启动相关服务却收到如下错误: Failed to get D-Bus connection: Operatio ...

  4. 在c/c++中调用Java方法

    JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活的使用. 通过使用JNI可 ...

  5. python第二十一天---昨天没写完作业

    作业 2, 模拟计算器开发:实现加减乘除及拓号优先级解析用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ...

  6. python编程的简洁代码

    1.列表间元素操作 L1 = [1,3,5,]L2 = [2,5,3,1,8]x = set(L1)y = set(L2)#差集print(y - x)#交集print(y&x)#并集prin ...

  7. 利用RSACryptoServiceProvider进行RSA加密解密

    前言: 本文只介绍How to use,对于加密算法的研究不予讨论. 关于私钥的存储,微软给的建议是使用windows自带的秘钥容器,相见文档. 为了直观看到私钥和公钥,本文直接将其存入XML文件中. ...

  8. 基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码

    比如 想跳到 mao.aspx 的页面 的div id="s" 的位置 那么 只用<a href="mao.aspx#s"> 就可实现跳转到指定位置 ...

  9. leetcode 112. Path Sum 、 113. Path Sum II 、437. Path Sum III

    112. Path Sum 自己的一个错误写法: class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if(root ...

  10. Qt中 .pro 文件和 .pri 文件简介

    *.pro 这是一个典型的Qt示例程序的.pro文件(propriprfprl.pro): TEMPLATE = app CONFIG += QT QT += core gui TARGET = pr ...