zoukankan      html  css  js  c++  java
  • C# 爬虫框架实现 流程_各个类开发

    目录链接: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数据库(需手动创建)和输出到终端两种方式
  • 相关阅读:
    NOIP1996 第三题
    vijos P1071
    USACO 2.3
    NOIP2006 第二题(change)
    NOIP2006 第二题
    NOIP2005 第三题
    Building Block 动态规划
    砝码问题 Weight
    装箱问题(Packing DP)
    算法第二章上机实践报告
  • 原文地址:https://www.cnblogs.com/jiangtu/p/5605794.html
Copyright © 2011-2022 走看看