scrapy框架的命令行解释

本文最后更新于:2021年1月29日 下午

Scrapy 是通过 scrapy 命令行工具进行控制的。 这里我们称之为 “Scrapy tool” 以用来和子命令进行区分。对于子命令,我们称为 “command” 或者 “Scrapy commands”。Scrapy tool 针对不同的目的提供了多个命令,每个命令支持不同的参数和选项。

创建爬虫项目

  • scrapy startproject 项目名

    1
    2
    3
    4
    5
    6
    7
    8
    (venv) D:\python\爬虫学习\scrapy_spider>scrapy startproject testproject
    New Scrapy project 'testproject', using template directory 'd:\python\venv\lib\site-pack
    ages\scrapy\templates\project', created in:
    D:\python\爬虫学习\scrapy_spider\testproject
    You can start your first spider with:
    cd testproject
    scrapy genspider example example.com

    这个时候爬虫的目录结构就已经创建完成了,目录结构如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    (venv) D:\python\爬虫学习\scrapy_spider\testproject>tree /f
    卷 DATADRIVE1 的文件夹 PATH 列表
    卷序列号为 4A47-5EA3
    D:.
    │ scrapy.cfg

    └─testproject
    │ items.py
    │ middlewares.py
    │ pipelines.py
    │ settings.py
    │ __init__.py

    └─spiders
    __init__.py

    接着我们按照提示可以生成一个spider,这里以百度作为例子,生成spider的命令格式为;

  • scrapy genspider 爬虫名字 爬虫的网址

    1
    2
    3
    4
    5
    (venv) D:\python\爬虫学习\scrapy_spider\testproject>scrapy genspider baidu.com www.baidu
    .com
    Created spider 'baidu.com' using template 'basic' in module:
    testproject.spiders.baidu_com

  • scrapy crawl 爬虫名字 开始运行爬虫

关于命令详细使用

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

  • 全局命令

    • startproject

      1
      2
      # 创建项目
      scrapy startprojects 项目名
    • genspider

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      # 列出所有的模版
      scrapy genspider -l
      # 运行结果
      (venv) D:\python\爬虫学习\scrapy_spider\testproject>scrapy genspider -l
      Available templates:
      basic
      crawl
      csvfeed
      xmlfeed

      # 当我们创建的时候可以指定模板,不指定默认用的basic,如果想要指定模板则通过
      scrapy genspider -t 模板名
      # 生成一个项目crawl模版
      scrapy genspider -t crawl zhihu wwww.zhihu.com
    • settings

      1
      2
      3
      4
      5
      6
      7
      # 获取帮助信息
      scrapy settings -h
      # 获取settings.py中的配置
      scrapy settings --get 配置名
      # 例子获取settings.py中的MONGO_URL
      (venv) D:\python\爬虫学习\scrapy_spider\quotetutorial>scrapy settings --get MONGO_URL
      localhost
    • runspider

      1
      2
      # 运行爬虫
      scrapy runspider 爬虫名
    • shell

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      # 进入交互模式
      scrapy shell 爬虫网址
      # 例子
      (venv) D:\python\爬虫学习\scrapy_spider\testproject>scrapy shell http://baidu.com

      > (referer: None)
      [s] Available Scrapy objects:
      [s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
      [s] crawler <scrapy.crawler.Crawler object at 0x000001D3C1D5E1F0>
      [s] item {}
      [s] request <GET http://baidu.com>
      [s] response <200 http://www.baidu.com/>
      [s] settings <scrapy.settings.Settings object at 0x000001D3C1D5E100>
      [s] spider <DefaultSpider 'default' at 0x1d3c2218e80>
      [s] Useful shortcuts:
      [s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redire
      cts are followed)
      [s] fetch(req) Fetch a scrapy.Request and update local objects
      [s] shelp() Shell help (print this help)
      [s] view(response) View response in a browser
      >>> scrapy
      <module 'scrapy' from 'd:\\python\\venv\\lib\\site-packages\\scrapy\\__init__.py'>
      >>> exit()
    • fetch

      使用 Scrapy 下载器(downloader)下载给定的 URL,并将获取到的内容送到标准输出。
      该命令以 spider 下载页面的方式获取页面。例如,如果 spider 有 USER_AGENT 属性修改了 User Agent,该命令将会使用该属性。
      因此,您可以使用该命令来查看 spider 如何获取某个特定页面。
      该命令如果非项目中运行则会使用默认 Scrapy downloader 设定。

      1
      2
      3
      4
      5
      6
      7
      8
      # 输出日志及网页源代码
      scrapy fetch 爬虫网址
      # 不显示运行日志
      scrapy fetch --nolog 爬虫网址
      # 打印响应头信息
      scrapy fetch --headers 爬虫网址
      # 不做跳转
      scrapy fetch --no-redirect 爬虫网址
    • view

      在浏览器中打开给定的 URL,并以 Scrapy spider 获取到的形式展现。 有些时候 spider 获取到的页面和普通用户看到的并不相同。 因此该命令可以用来检查 spider 所获取到的页面,并确认这是您所期望的。

      1
      2
       # view 从浏览器中打开网页
      scrapy view http://www.taobao.com

      因为现在很多网站的数据都是通过ajax请求来加载的,这个时候直接通过requests请求是无法获取我们想要的数据,所以这个view命令可以帮助我们很好的判断

    • version

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      # 查看版本信息,并查看依赖库的信息
      scrapy version
      scrapy version -v

      # 运行结果
      (venv) D:\python\爬虫学习\scrapy_spider\quotetutorial\quotetutorial>scrapy version
      Scrapy 2.4.1

      (venv) D:\python\爬虫学习\scrapy_spider\quotetutorial\quotetutorial>scrapy version -v
      Scrapy : 2.4.1
      lxml : 4.5.0.0
      libxml2 : 2.9.5
      cssselect : 1.1.0
      parsel : 1.6.0
      w3lib : 1.22.0
      Twisted : 20.3.0
      Python : 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AM
      D64)]
      pyOpenSSL : 20.0.1 (OpenSSL 1.1.1i 8 Dec 2020)
      cryptography : 3.3.1
      Platform : Windows-10-10.0.17763-SP0
  • 项目命令

    • crawl

      这个是用去启动spider爬虫格式为:
      scrapy crawl 爬虫名字
      这里需要注意这里的爬虫名字和通过scrapy genspider 生成爬虫的名字是一致的

    • check

      用于检查代码是否有错误

      scrapy check

      1
      2
      3
      4
      5
      6
      (venv) D:\python\爬虫学习\scrapy_spider\testproject>scrapy check

      ----------------------------------------------------------------------
      Ran 0 contracts in 0.001s

      OK
    • list

      列出所有可用的爬虫

      scrapy list

      1
      2
      3
      4
      (venv) D:\python\爬虫学习\scrapy_spider\testproject>scrapy list
      baidu.com
      zhihu

    • edit

      edit 在命令行下编辑spider ### 不建议运行
      scrapy edit 爬虫名

    • parse

      获取给定的 URL 并使用相应的 spider 分析处理。如果您提供--callback 选项,则使用 spider 的该方法处理,否则使用 parse

      scrapy parse 爬虫网址 [options]

      支持的选项:

      • --spider=SPIDER:跳过自动检测 spider 并强制使用特定的 spider
      • --a NAME=VALUE:设置 spider 的参数(可能被重复)
      • --callback or -c:spider 中用于解析返回(response)的回调函数
      • --pipelines:在 pipeline 中处理 item
      • --rules or -r:使用 CrawlSpider 规则来发现用来解析返回(response)的回调函数
      • --noitems:不显示爬取到的 item
      • --nolinks:不显示提取到的链接
      • --nocolour:避免使用 pygments 对输出着色
      • --depth or -d:指定跟进链接请求的层次数(默认:1)
      • --verbose or -v:显示每个请求的详细信息
    • bench

      运行 benchmark 测试。Benchmarking。

      scrapy bench


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!