zoukankan      html  css  js  c++  java
  • 命令行

    scrapy支持命令行模式,它提供了一套命令集,每个命令都有不同的参数和可选项

    关于配置的设定
      Scrapy会在scrapy.cfg文件查找配置参数,该文件位于scrapy project的根目录下
      配置参数有不同的有效范围
        system-wide
        user-wide
        project-wide

      优先级
        project-wide > user-wide > system-wide

    环境变量
      可以通过设置环境变量的方式,来控制scrapy使用哪些设置
      相关环境变量如下:
         SCRAPY_SETTINGS_MODULE
         SCRAPY_PROJECT
         SCRAPY_PYTHON_SHELL

    Project目录结构
      Scrapy project默认目录结构如下,但可以改变
        scrapy.cfg
        myproject/
          __init__.py
          items.py
          middlewares.py
          pipelines.py
          settings.py
          spiders/
            __init__.py
            spider1.py
            spider2.py

        scrapy.cfg
          该文件所在目录称为project根目录,该文件包含了python模块名,这些模块定义了project settings

    project间共享根目录
      一个project的根目录,可能会共享给多个project,而每个project会有自己的settings
      因此需要定义别名

      [settings]
      default = myproject1.settings #表示默认情况下使用哪个project
      project1 = myproject1.settings
      project2 = myproject2.settings

      默认情况下,scrapy command-line tool会使用default settings
      可通过修改环境变量SCRAPY_PROJECT来更改使用哪个project

    scrapy settings #输出:Project 1 Bot,get BOT_NAME
    export SCRAPY_PROJECT=project2
    scrapy settings #get BOT_NAME --输出:Project 2 Bot,get BOT_NAME

    Scrapy Tool使用
      Scrapy Tool是一款软件,类似于linux的vi,通过命令行使用
      使用scrapy tool会返回一些项目信息及一些可用的命令
      如果使用的是anaconda,需要在anaconda的命令行上执行

    project创建
      scrapy startproject myproject [project_dir]
      如果不指定project_dir,则默认使用的是myproject的目录
      创建project后,进入project目录(cd project_dir),就可以操控project了

    project控制
      要想操控project,必须要进入到project文件夹下
      在project内和project外运行命令,返回的结果可能会有很大的不同
      有些属性如user_agent,进入project根目录下执行时,project内部的user_agent会覆盖global的user_agent

    内置命令集
      帮助命令
        scrapy <command> -h  可查看所有命令的帮助文档
        scrapy -h 查看所有命令

      命令分类
        Project-specific commands:必须进入到project目录内执行

        Global commands:不需要一定进入到project目录内执行
                 project外的setting会被project内的setting覆盖,因此project目录内执行命令会有不同结果

      startproject
        语法:scrapy startproject <project_name> [project_dir]
        require project:no
        在project_dir下创建project,如果不指定project_dir,则默认在当前目录下创建project


      genspider
        语法:scrapy genspider [-t template] <name> <domain>,require project:no
        在当前文件夹下创建一个新的spider
        如果在当前project目录下,则在当前project的spiders文件夹下创建一个新的spider
        name用于指定新建spider的name
        domain用于生成spider的属性allowed_domains和start_urls

        创建spider不一定要用这种命令行的方式,直接创建文件并手写代码或拷贝其他spider并修改更方便

      crawl
        语法:scrapy crawl <spider>
        require project:yes
        进入project根目录,执行该命令,使用spider爬取数据

      check
        语法:scrapy check [-l] <spider>
        require project:yes
        进入project根目录,执行该命令,检查spider内部是否有错误
        使用例:
          scrapy check   #检查project内所有的spider
          scrapy check <spider_name>   #检查某指定spider

      list
        语法:scrapy list
        require project:yes
        进入project根目录,执行该命令,列出当前project下所有的spider


      edit
        语法:scrapy edit <spider>,require project:yes
        使用EDITOR环境变量或EDITOR Setting指定的编辑器修改spider
        该方法仅用于方便时进行操作,也可以使用IDE或记事本直接编辑

      fetch
        语法:scrapy fetch <url>
        require project:no
        使用Scrapy downloader从给定的URL下载网页源码,并将其写入标准输出
        spider下载网页源码与该命令下载的是一样的

        如果spider定义了USER_AGENT属性,该属性会覆盖User Agent,下载是会使用定义的USER_AGENT属性
        因此,如果想查看spider下载某个网页具体是什么样的,可以使用该命令,而无需debug

        如果是在project外执行该命令,它会使用默认的Scrapy downloader settings

        支持的参数
          --spider=SPIDER: 强制使用某个指定spider
          --headers: 打印response的http header,而不是response body
          --no-redirect: 不遵循HTTP 3xx重定向(默认是遵循)
          --nolog:不打印log

        使用例:
          scrapy fetch --nolog http://www.example.com/some/page.html
          scrapy fetch --nolog --headers http://www.example.com/

      

      view
        语法:scrapy view <url>
        require project:no
        在浏览器打开指定的URL
        
        使用例:
          scrapy view --nolog http://www.example.com/some/page.html

      shell
        语法:scrapy shell [url]
        require project:no
        为给定的URL启动Scrapy shell,类似ipython,如果没有URL,则为空
        也支持类unix的本地文件路径,包括绝对路径和相对路径

        支持的参数
          --spider=SPIDER:强制使用某个指定spider
          -c code:评估shell中的code,打印结果并退出
          --no-redirect: 不遵循HTTP 3xx重定向(默认是遵循)
                该参数只影响在命令行作为参数传递的URL
                一旦进入shell,默认情况下,fetch(url)仍将遵循HTTP重定向

      parse
        语法:scrapy parse <url> [options],require project:yes
        使用给定的URL,并使用spider对结果进行解析
        解析方法是通过--callback选项指定的,如果不指定callback方法,则默认使用parse()方法

      settings
        语法:scrapy settings [options],require project:no
        获取setting的值
        如果是在project内,返回project setting值,如果在project外,则返回默认的Scrapy setting值

        scrapy settings --get BOT_NAME #输出:scrapybot
        scrapy settings --get DOWNLOAD_DELAY #输出:0

      runspider
        语法:scrapy runspider <spider_file.py>
        require project:no
        运行一个包含在python文件中的spider,而不必创建一个项目

      version
        语法:scrapy version [-v]
        require project:no
        打印scrapy版本
        如果与-v一起使用,还打印python、twisted和平台信息,这对于bug报告很有用

      bench
        语法:scrapy bench
        require project:no
        运行一个快速基准测试,测试电脑当前爬取速度性能

      自定义project命令
        COMMANDS_MODULE
          可以通过使用COMMANDS_MODULE来自定义并查看自定义project命令
          Default: '' (empty string)
          COMMANDS_MODULE = 'mybot.commands'

        注册命令
          通过setup.py入口点注册命令
          注意:该功能尚处于试验阶段,会不稳定

  • 相关阅读:
    python的三个函数map、filter、reduce详解
    python 对文件进行切分行
    sed 命令匹配行操作
    停止学习框架
    JS中双等号“==”使用情况
    JavaScript中数组迭代方法
    JavaScript中replace()方法的第二个参数解析
    Vue生命周期
    JS中浮点数精度误差解决
    大量DOM操作的解决方案
  • 原文地址:https://www.cnblogs.com/shiliye/p/11045985.html
Copyright © 2011-2022 走看看