准备工作:

  从github上download工程。

  安装VS2017。

  安装 .net core 2.0。

  编译通过。

基础架构:

  调度器 Scheduler 从根site开始,向 Downloader 分配请求任务。

  Downloader 根据分配到的请求任务,向目标site 下载 page,并交由 PageProcessor 进行页面处理。

  PageProcessor 将处理的结果推入 Pipeline,将解析出的新的链接,推入 Scheduler。

  循环直至 Scheduler 没有新的请求可以处理。

Spider.Create:

  设定根访问节点、唯一身份标识、请求调度器 Scheduler,页面处理器 PageProcessor。

  以给出的 Sample 样例中,遍历 cnblog 站点为例进行解析:

    Scheduler 是 QueueDuplicateRemovedScheduler。就是一个存放 Request 的队列。

    PageProcessor 是默认的 DefaultPageProcessor。

    这里涉及到 XPath 的知识,需要快速了解。

  XPath:XPath 使用路径表达式在 XML 文档中进行导航,选取 XML 文档中的节点或者节点集。

  主要知识点见:http://www.runoob.com/xpath/xpath-syntax.html

页面处理流程 BasePageProcessor.Process:

        public void Process(Page page){bool isTarget = true;if (_targetUrlPatterns.Count > 0 && !_targetUrlPatterns.Contains(null)){foreach (var regex in _targetUrlPatterns){isTarget = regex.IsMatch(page.Url);if (isTarget){break;}}}if (!isTarget){return;}Handle(page);page.ResultItems.IsSkip = page.ResultItems.Results.Count == 0;if (!page.SkipExtractTargetUrls){ExtractUrls(page);}}

  在 Sample 中,调用的是 DefaultPageProcessor 提供的 hanlde:

            page.AddResultItem("title", page.Selectable.XPath("//title").GetValue());page.AddResultItem("html", page.Content);

  默认的页面处理,是找出 “title” 元素,以及整个 html 内容。

  接着在下载好的页面内容中,查找更多的 url。

dotNetSpider 手记相关推荐

  1. AM335X的汇编语言与c语言,X86汇编语言学习手记 -- 汇编和C协同

    X86汇编语言学习手记(3) 2004年12月 在X86汇编语言学习手记(1)(2)中,可以看到栈(Stack)作为进程执行过程中数据的临时存储区域,通常包含如下几类数据: 局部变量 函数调用的返回地 ...

  2. 结巴分词和自然语言处理HanLP处理手记

    手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...

  3. 大叔手记(17):大叔2011年读过的书及2012年即将要读的书

    前言 2011年是大叔最累的一年(基本上都是晚上12点以后睡觉,早上6点30分起),读得书也是异常的多,一方面要保持自己的技术在最前列,另外方面技术管理和项目管理方面的东西也要进一步进阶,2011年读 ...

  4. webpack入门学习手记(一)

    本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...

  5. 【手记】解决启动SQL Server Management Studio 17时报Cannot find one or more components...的问题

    [手记]解决启动SQL Server Management Studio 17时报Cannot find one or more components...的问题 参考文章: (1)[手记]解决启动S ...

  6. ELK菜鸟手记 (三) - X-Pack权限控制之给Kibana加上登录控制以及index_not_found_exception问题解决

    ELK菜鸟手记 (三) - X-Pack权限控制之给Kibana加上登录控制以及index_not_found_exception问题解决 参考文章: (1)ELK菜鸟手记 (三) - X-Pack权 ...

  7. Cheat Engine Tutorial 闯关手记

    Cheat Engine Tutorial 闯关手记 第一关 Cheat Engine 能做什么?修改游戏的数值,就象<金山游侠V>,但它能胜任动态地址的查找:制作游戏专用的修改器,补丁, ...

  8. 前台提示_住哲随手记:前台工作备忘录,记你想记的所有事

    酒店前台每天需要手写记录大量的代办事项,如上午10点101房间叫早,3号提醒客人续住等.但是由于前台工作琐碎,交接班的时候会发生交接事项遗漏的情况,导致对客服务疏忽,很容易造成客人差评. 请收下小哲的 ...

  9. OpenWrite 新增扩散渠道:慕课手记,支持图片转存!

    相信用过慕课去手工发布文章的童鞋,经常会被下面这个问题搞的比较吃力. 直接复制图片到编辑器中,经常出现图片上传失败的问题. 在这种情况下,我们只能一个个图片手工上传来完成.很多需要大量图片支持的作者, ...

最新文章

  1. vue底部选择器_Vue组件-极简的地址选择器
  2. appium 如何调用 adb_带你了解可用于Android APP自动化测试的框架:Appium
  3. 人力资源社会保障部关于公布国家职业资格目录的通知
  4. ASP.NET DROPDOWNLIST无刷新联动(中文URL参数处理)
  5. html音乐播放心得体会,音乐心得体会
  6. jdk1.8中文帮助文档
  7. fastdfs 原理
  8. python批量保存网页为pdf_在chrome Python3.6中自动打印/将网页保存为pdf
  9. linux 开启共享文件,文件夹共享权限设置,linux设置文件夹权限-
  10. 【软件工程】数据流图 ( 数据流图简介 | 数据流图概念 | 数据流 | 加工 | 数据存储 | 外部实体 | 数据流图分层 | 顶层数据流图 | 中层数据流图 | 底层数据流图 )
  11. Web前端学习第四周
  12. Xception实现动物识别(TensorFlow)
  13. 搞定计算机网络面试,看这篇就够了
  14. 这位博主居然说“我就是看故事也要把这知识学了”
  15. mybatis-plus clickhouse支持分页
  16. Jmeter 性能测试—阶梯式压测
  17. 典型的贪心算法~ (田忌赛马 )
  18. 该按钮可以重启计算机,win7指定快捷键和重启快捷键是什么
  19. 中小手机厂商遇倒闭潮:沦为小米华为炮灰
  20. 计算机求和公式IFEROR,Excel iserror函数用法和iferror函数的区别

热门文章

  1. OpenCV图像修补
  2. Qt Creator构建并运行示例
  3. OpenGL Overdraw Count透支数的实例
  4. OpenGL Multi-Indirect Draw小行星的实例
  5. C++正整数的素数分解的实现算法(附完整源码)
  6. C++判断一个数字是否是某个数字的阶乘(附完整源码)
  7. QT的QRadioButton类的使用
  8. QT的QQuickImageProvider类的使用
  9. QT的QAction类的使用
  10. vba搜索java里面的sql_在EXCEL中使用SQL语句查询集锦-持续更新中,敬请关注