zoukankan      html  css  js  c++  java
  • python爬虫之Scrapy框架的架构原理和基本命令

    Scrapy框架

    Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是事件驱动的, 并且比较适合异步的代码, 对于会阻塞线程的操作包含访问文件, 数据库或者Web, 产生新的进程并需要处理新进程的输出(如运行shell命令), 执行系统层次操作的代码(冗余等待系统队列), Twisted提供了允许执行上面的操作但不会阻塞代码执行的方法.

    Scrapy流程图 :

      

      Scrapy数据流是由执行的核心引擎(engine)控制, 流程如下 :

        1. 爬虫引擎engine获得初始请求开始抓取.

        2. 爬虫引擎engine开始请求调度程序scheduler, 并准备对下一次的请求进行抓取.

        3. 爬虫调度器返回下一个请求给爬虫引擎.

        4. 引擎请求发送端奥下载器downliader, 并准备对下一次的请求进行抓取.

        5. 一旦下载器完成页面下载, 将下载结果返回给爬虫引擎engine.

        6. 爬虫引擎engine将下载器downloader的响应通过中间件middlewares返回给爬虫spiders进行处理.

        7. 爬虫spiders处理响应, 并通过中间件middlewares返回处理后的items, 以及新的请求给引擎.

        8. 引擎发送处理后的items到项目管道, 然后把处理结果返回给调度器scheduler, 调度器计划处理下一个请求抓取.

        9. 重复该过程(继续步骤1), 知道将所有url爬取完毕.

    组件功能 :

      爬虫引擎(engine)

        爬虫引擎负责控制各个组件之间的数据流, 当某些操作触发事件后都是通过engine来处理.

      调度器(scheduler)

        调度器收来engine的请求并将请求放入队列中, 并通过事件返回给engine.

      下载器(downloader)

        通过engine请求下载网络数据并将结果响应给engine.

      Spider

        Spider发出请求, 并处理engine返回给它下载器响应回来的数据, 以items和规则内的数据请求(urls)返回给engine

      管道项目(items pipeline)

        负责处理engine返回spider解析后的数据, 并且将数据持久化吗例如将数据存入数据库后者文件.

      下载中间件

        下载中间件是engine和下载器交互组件, 以钩子(插件)的形式存在, 可以带替接收请求, 处理数据的下载以及将结果响应给engine

      spider中间件

        spider中间件是engine和spider之间的交互组件, 以钩子的形式存在, 可以代替处理response以及返回给engine items及新的请求集.


     Scrapy框架的基本命令

    创建Scrapy项目

      创建scrapy项目的命令是scrapy startproject ''项目名'', 创建一个爬虫项目,

      进入到项目目录scrapy genspider ''爬虫名字'' ''爬虫的域名''

    xxxdeMBP:python_project xxx$ scrapy startproject test1
    New Scrapy project 'test1', using template directory '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scrapy/templates/project', created in:
        /Users/xxx/Documents/python_project/test1
    
    You can start your first spider with:
        cd test1
        scrapy genspider example example.com
    xxxdeMBP:python_project zhaofan$ 
    xxxdeMBP:test1 xxx$ scrapy genspider shSpider hshfy.sh.cn
    Created spider 'shSpider' using template 'basic' in module:
      test1.spiders.shSpider

    scrapy项目结构 :

      

      items.py 负责数据模型的建立, 类似于实体类

      middleares.py 自己定义的中间件

      pipelines.py 负责对spider返回数据的处理

      settings.py 负责对整个爬虫的配置

      spiders目录 负责存放继承自scrapy的爬虫类

      scrapy.cfg scrapy基础配置

     关于命令的详细使用 :

      命令的使用范围 :

        使用命令分为全局命令和项目命令, 全局的命令表示可以在任何地方使用, 而项目的命令只能在项目目录下使用

        全局命令 :

          startproject : 创建爬虫项目

          genspider : 用于生成爬虫

          settings : 获取当前的配置信息(scrapy settings -h获取此命令的所有帮助信息)

          runspider : 启动爬虫程序(和crawl启动不同, 通过scrapy runspider 爬虫文件名 启动)

          shell : 是一个命令行交互模式(scrapy shell url地址进入交互模式)

          fetch : 该命令会通过scrapy downloader将网页源码下载下来显示(scrapy fetch url地址)

          view : 该命令会将网页document内容下载下来, 并且在浏览器显示(scrapy view url地址)

          version : 查看版本信息, 并查看依赖库的信息

        项目命令 :

          crawl : 启动爬虫程序(scrapy crawl 爬虫名字)

          check : 用于检查代码是否有错误(scrapy check)

          list : scrapy list列出可用的爬虫

          edit

          parse

          bench

      

  • 相关阅读:
    Tensorflow2.0语法
    Neural Networks and Deep Learning--Introduction to Deep Leraning
    机器学习---吴恩达---Week11(机器学习应用举例分析)
    机器学习---吴恩达---Week10(机器学习概述与单变量线性回归方程分析)
    机器学习---吴恩达---Week9_2(推荐系统)
    机器学习---吴恩达---Week9_1(异常检测)
    机器学习---吴恩达---Week8_2(非监督学习_PCA)
    机器学习---吴恩达---Week8(非监督学习_集群算法)
    机器学习---吴恩达---Week7(支持向量机学习SVM)
    机器学习---吴恩达---Week6_2(机器学习系统设计)
  • 原文地址:https://www.cnblogs.com/dong-/p/10304994.html
Copyright © 2011-2022 走看看