[开源 .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(); // 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
[开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [五] 如何做全站采集?的更多相关文章
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 为什么要造轮子 同学们可以去各大招聘网站查看一下爬虫工程师 ...
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [二] 基本使用
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 使用环境 Visual Studio 2017 .NET ...
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [四] JSON数据解析
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 场景模拟 接上一篇, JD SKU对应的店铺信息是异步加载 ...
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 上一篇介绍的基本的使用方式,自由度很高,但是编写的代码相对 ...
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] 学习
http://www.cnblogs.com/jjg0519/p/6707513.html
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 为什么要造轮子 同学们可以去各大招聘网站查看一下爬虫工程师的要求,大多是招JA ...
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [二] 基本使用
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 使用环境 Visual Studio 2015 or later .NET 4 ...
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 上一篇介绍的基本的使用方式,虽然自由度很高,但是编写的代码相对还是挺多.于是框 ...
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [四] JSON数据解析
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 场景模拟 假设由于漏存JD SKU对应的店铺信息.这时我们需要重新完全采集所有 ...
随机推荐
- [20170703]从备份集取出spfile转化为pfile.txt
[20170703]从备份集取出spfile转化为pfile.txt --//上个星期的事情,要从备份集里面取出看看spfile文件某个参数当时的情况,结果尝试命令老是出错,做一个记录.--//最后选 ...
- 洗礼灵魂,修炼python(38)--面向对象编程(8)—从算术运算符进一步认识魔法方法
上一篇文章了解了魔法方法,相信你已经归魔法方法至少有个概念了,那么今天就进一步的认识魔法方法.说这个之前,大脑里先回忆一下算术操作符. 什么是算术操作符?忘记没有?忘记了的自己倒回去看我前面的博文或者 ...
- SQL Server 临时表和表变量系列之选择篇
原文地址:https://yq.aliyun.com/articles/69187 摘要: # 摘要 通过前面的三篇系列文章,我们对临时表和表变量的概念.对比和认知误区已经有了非常全面的认识.其实,我 ...
- Unity LayerMask 的位运算
Unity的Layer Unity是用 int32来表示32个Layer层,int32用二进制来表示一共有32位. 0000 0000 0000 0000 0000 0000 0000 0000 31 ...
- mysql状态分析之show global status(转)
mysql> show global status;可以列出MySQL服务器运行各种状态值,我个人较喜欢的用法是show status like '查询值%';一.慢查询mysql> sh ...
- ApplicationContext中Bean的生命周期
引言 Bean应用上下文中的生命周期和在BeanFactory中生命周期类似,不同的是,如果Bean实现了org.springframework.context.ApplicationContextA ...
- 使用CefSharp的一些需要注意的点
程序关闭的时候一定要加上: CefSharp.Cef.Shutdown(); 因为关闭的时候,不将浏览器关闭的话,会阻塞主线程导致报错. 修复CefSharp浏览器组件中文输入的bug // brow ...
- JavaScipt中的Math.ceil() 、Math.floor() 、Math.round()、Math.pow() 三个函数的理解
以前一直会三个函数的使用产生混淆,现在通过对三个函数的原型定义的理解,其实很容易记住三个函数. 现在做一个总结: 1. Math.ceil()用作向上取整. 2. Math.floor()用作向下取整 ...
- 控件_ImageView
ImageView(图片视图)的基本概念:就是将一张图片放在一个Activity中显示出来,就是一个放图片的容器 import android.app.Activity; import android ...
- Python yield的用法
yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist( ...