目录链接: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. 剑指 Offer 40. 最小的k个数

    剑指 Offer 40. 最小的k个数 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:ar ...

  2. 栅栏密码(The Rail-Fence Cipher)详解

    最近训练CTF的时候,发现密码学这块的知识不太系统,所以自己接下来会陆陆续续整理出来 今天学习了栅栏密码,BugkuCTF里面的一道叫做"聪明的小羊"的题就与栅栏密码相关 特点 栅 ...

  3. python之(mysql数据库操作)

    前言:关心3步骤(此文章只针对python自动化根基展开描述) 什么是mysql数据库操作?  答:利用python对mysql数据库进行增, 删, 改, 查 操作 为什么要用python对mysql ...

  4. 【NLP学习其五】模型保存与载入的注意事项(记问题No module named 'model')

    这是一次由于路径问题(找不到模型)引出模型保存问题的记录 最近,我试着把使用GPU训练完成的模型部署至预发布环境时出现了一个错误,以下是log节选 unpickler.load() ModuleNot ...

  5. 深入理解jvm-2Edition-类文件结构

    概述: 规范而独立的类文件结构以及只与类文件关联的虚拟机为Java实现了平台无关性,甚至还带来了一些语言无关性. 只要将源代码编译为Class文件规定的格式,JVM就可以执行. JVM的指令描述能力比 ...

  6. 十六进制转十进制 BASIC-12

    十六进制转十进制 代码 import java.math.BigInteger; import java.util.Scanner; /* * 从键盘输入一个不超过8位的正的十六进制数字符串, * 将 ...

  7. 《MySQL实战45讲》(8-15)笔记

    MySQL实战45讲 目录 MySQL实战45讲 第八节: 事务到底是隔离的还是不隔离的? 在MySQL里,有两个"视图"的概念: "快照"在MVCC里是怎么工 ...

  8. configmap使用方法

    说明: kubernetes统一配置管理方案configmap,实现将配置文件从容器镜像中解耦,增强应用的可移植性.数据可直接注入pod对象中,为容器所使用,注入方式有挂载为存储卷和传递为环境变量两种 ...

  9. wait_time参数

    1.未修改的 wait_timeout 的初始值是28800,单位为秒,等于8个小时 2.wait_timeout过大有弊端,其体现就是mysql里有大量的sleep进程无法及时释放,拖累系统性能 但 ...

  10. 9、改善深度神经网络之正则化、Dropout正则化

    首先我们理解一下,什么叫做正则化? 目的角度:防止过拟合 简单来说,正则化是一种为了减小测试误差的行为(有时候会增加训练误差).我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好 ...