目录链接:C# 爬虫框架实现 概述

  对比通用爬虫结构,我将自己写的爬虫分为五个类实现:

Spider主类:负责设置爬虫的各项属性

Scheduler类:负责提供URL到下载类,接收URL并做去重

Downloader类:负责下载页面并提供下载到的HTML内容

PageProgress类:HTML解析类

Pipeline类:解决存储问题

下面一一介绍。主要介绍看代码中的注释,源代码在 C# 爬虫框架实现 概述 链接提供下载。

Spider主类

  1. 目的:方便爬虫的设置,统一入口格式化。
  2. 链式调用问题:即类似以下格式:
    1 spider.setScheduler(urlList)
    2 .setPageProgress(patterns, ".common_link/[href]")
    3 .setPipeline(new DisplayInConsole())
    4 .run();

    响应设置类可以通过返回类型为Spider解决链式调用。

Scheduler类

  1. 目的:解决从哪里下载的问题。方法:设置urlDowning/urlDowned集合,以及去重
  2. URL去重这一块是爬虫很核心的一块,但是我没有怎么写。一方面是因为有开源类库,一方面是因为我不想写分布式爬虫。我所想的,只是做一个精提取式的爬虫就行了。分布式爬虫需要投入的精力太多。

Downloader类

  1. 目的:下载HTML源码类。
  2. 注意网页编码格式
  3. 下载到的HTML源码会另开线程并且转到PageProgress解析HTML。此处如果不适用多线程将会损失性能。
  4. WebClient类很坑爹的没有发现超时控制方法。。改天找机会重写一下。。

PageProgress类

  1. 目的:解决提取哪些内容的问题。方法:正则表达式/CSQuer开源类
  2. 提取到的URL格式化问题
  3. 解析内容的结构化问题

PipeLine类

  1. 目的:决定存储到哪里。方法:派生类覆盖基类。逆变特性应该也可以,我没试
  2. 只实现了存储到SQLserver的Spider数据库(需手动创建)和输出到终端两种方式

C# 爬虫框架实现 流程_各个类开发的更多相关文章

  1. C# 爬虫框架实现 流程_爬虫结构/原理

    目录链接:C# 爬虫框架实现 概述 首先需要讲的是,爬虫的原理.其实在我看来,爬虫只是用来解决以下四个问题的工具: 提取哪些网页 提取网页上的哪些内容 存储到哪里(推荐数据库/开源类/Console) ...

  2. scrapy爬虫框架处理流程简介

    1.SPIDERS的yeild将request发送给ENGIN2.ENGINE对request不做任何处理发送给SCHEDULER3.SCHEDULER( url调度器),生成request交给ENG ...

  3. 3.layhm框架的流程与Boot类启动

    思路 在项目根目录里新建好对应的目录 cmd里在项目根目录里,composer init初使化,一路回车 把要自动加载的文件和目录定在composer.json文件的autoload里,file是自动 ...

  4. C# 爬虫框架实现 概述

    目录: C# 爬虫框架实现 概述 C# 爬虫框架实现 流程_爬虫结构/原理 C# 爬虫框架实现 流程_各个类开发 C# 爬虫框架实现 流程_遇到的问题 C# 爬虫框架实现 后记 C#爬虫框架实现 源代 ...

  5. 【网络爬虫】【python】网络爬虫(四):scrapy爬虫框架(架构、win/linux安装、文件结构)

    scrapy框架的学习,目前个人觉得比较详尽的资料主要有两个: 1.官方教程文档.scrapy的github wiki: 2.一个很好的scrapy中文文档:http://scrapy-chs.rea ...

  6. Python爬虫框架Scrapy获得定向打击批量招聘信息

    爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这样的说法不够专业,更专业的描写叙述就是.抓取特定站点网页的HTML数据.只是因为一个站点的网页非常多,而我们又不可能事先知道全部网页的URL地址, ...

  7. 爬虫框架 ---- scrapy 框架的介绍与安装

    -----  爬虫 基于B/S 模式的数据采集技术,按照一定的规则,自动的抓取万维网信息程序 以一个或多个页面为爬取起点,从页面中提取链接实现深度爬取 使用爬虫的列子 第三方抢票软件(360/猎豹/ ...

  8. Scrapy爬虫框架中的两个流程

    下面对比了Scrapy爬虫框架中的两个流程—— ① Scrapy框架的基本运作流程:② Spider或其子类的几个方法的执行流程. 这两个流程是互相联系的,可对比学习. 1 ● Scrapy框架的基本 ...

  9. 爬虫写法进阶:普通函数--->函数类--->Scrapy框架

    本文转载自以下网站: 从 Class 类到 Scrapy https://www.makcyun.top/web_scraping_withpython12.html 普通函数爬虫: https:// ...

随机推荐

  1. 🔥 LeetCode 热题 HOT 100(51-60)

    142. 环形链表 II 思路:快慢指针,快慢指针相遇后,慢指针回到头,快慢指针步伐一致一起移动,相遇点即为入环点 /** * Definition for singly-linked list. * ...

  2. 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发

    简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...

  3. 数据结构和算法学习笔记十五:多路查找树(B树)

    一.概念 1.多路查找树(multi-way search tree):所谓多路,即是指每个节点中存储的数据可以是多个,每个节点的子节点数也可以多于两个.使用多路查找树的意义在于有效降低树的深度,从而 ...

  4. Netty 源码分析系列(一)Netty 概述

    前言 关于Netty的学习,最近看了不少有关视频和书籍,也收获不少,希望把我知道的分享给你们,一起加油,一起成长.前面我们对 Java IO.BIO.NIO. AIO进行了分析,相关文章链接如下: 深 ...

  5. noip模拟测试20

    考试总结:这次考试,我非常真实地感觉到了自己能力的提高,具体来说,在之前的考试中,读完题之后我只会想到暴力的思路,甚至有的题连暴力都打不出来,但是这次在考场上我已经有了自己的一些想法,有了一个深入思考 ...

  6. Python - 函数实战

    前言 参考的是慕课网提供的实战,自己编码 http://www.imooc.com/wiki/pythonlesson1/function2.html 什么是模块化程序设计 在进行程序设计时将一个大程 ...

  7. 90%的开发者都不知道的UI本质原理和优化方式

    前言 很多开发者在工作中一直和UI打交道,所以认为UI非常的简单! 事实上对于90%的开发者来说,不知道UI的本质原理. 虽然在开发中,我们在接到产品的UI需求之后,可以走捷径照抄大型APP代码,但是 ...

  8. Check Directory Existence in Shell

    The following command in one line can check if a directory exists. You can check the return value (& ...

  9. linux联网、远程

    使用VMware虚拟机创建linux系统CentOS 7,连接网络以及远程Moba工具. 一.首先安装好VMware虚拟机和CentOS系统,网上很多教程,不在赘述. 二.打开VMware进行配置 1 ...

  10. 基于 CODING CD + Nocalhost 在大型应用的 ChatOps 实践

    本文作者:红亚科技 CTO--卢兴民 红亚科技聚焦信息技术发展,为信息技术相关专业提供优质教学服务 背景 ChatOps 最早起源于 GitHub,它以沟通平台为中心,通过与机器人产生对话和交互,使开 ...