zoukankan      html  css  js  c++  java
  • Scrapy系列教程(1)------命令行工具

    默认的Scrapy项目结构

    在開始对命令行工具以及子命令的探索前,让我们首先了解一下Scrapy的项目的文件夹结构。

    尽管能够被改动,但全部的Scrapy项目默认有类似于下边的文件结构:

    scrapy.cfg
    myproject/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            spider1.py
            spider2.py
            ...
    

    scrapy.cfg 存放的文件夹被觉得是 项目的根文件夹 。该文件里包括python模块名的字段定义了项目的设置。

    比如:

    [settings]
    default = myproject.settings
    

    使用 scrapy 工具

    您能够以无參数的方式启动Scrapy工具。

    该命令将会给出一些使用帮助以及可用的命令:

    Scrapy X.Y - no active project
    
    Usage:
      scrapy <command> [options] [args]
    
    Available commands:
      crawl         Run a spider
      fetch         Fetch a URL using the Scrapy downloader
    [...]
    

    假设您在Scrapy项目中执行,当前激活的项目将会显示在输出的第一行。上面的输出就是响应的样例。

    假设您在一个项目中执行命令将会得到类似的输出:

    Scrapy X.Y - project: myproject
    
    Usage:
      scrapy <command> [options] [args]
    
    [...]
    

    创建项目

    一般来说。使用 scrapy 工具的第一件事就是创建您的Scrapy项目:

    scrapy startproject myproject
    

    该命令将会在 myproject 文件夹中创建一个Scrapy项目。

    接下来,进入到项目文件夹中:

    cd myproject
    

    这时候您就能够使用 scrapy 命令来管理和控制您的项目了。

    控制项目

    您能够在您的项目中使用 scrapy 工具来对其进行控制和管理。

    比方。创建一个新的spider:

    scrapy genspider mydomain mydomain.com
    

    有些Scrapy命令(比方 crawl)要求必须在Scrapy项目中执行。 您能够通过下边的 commands reference来了解哪些命令须要在项目中执行,哪些不用。

    另外要注意。有些命令在项目里执行时的效果有些许差别。 以fetch命令为例,假设被爬取的url与某个特定spider相关联, 则该命令将会使用spider的动作(spider-overridden behaviours)。 (比方spider指定的 user_agent)。 该表现是有意而为之的。一般来说, fetch 命令就是用来測试检查spider是怎样下载页面。

    可用的工具命令(tool commands)

    该章节提供了可用的内置命令的列表。每一个命令都提供了描写叙述以及一些使用样例。

    您总是能够通过执行命令来获取关于每一个命令的具体内容:

    scrapy <command> -h
    

    您也能够查看全部可用的命令:

    scrapy -h
    

    Scrapy提供了两种类型的命令。

    一种必须在Scrapy项目中执行(针对项目(Project-specific)的命令),第二种则不须要(全局命令)。

    全局命令在项目中执行时的表现可能会与在非项目中执行有些许区别(由于可能会使用项目的设定)。

    全局命令:

    • startproject
    • settings
    • runspider
    • shell
    • fetch
    • view
    • version

    项目(Project-only)命令:

    • crawl
    • check
    • list
    • edit
    • parse
    • genspider
    • deploy
    • bench

    startproject

    • 语法: scrapy startproject <project_name>
    • 是否须要项目: no

    在 project_name 目录下创建一个名为 project_name 的Scrapy项目。

    样例:

    $ scrapy startproject myproject
    

    genspider

    • 语法: scrapy genspider [-t template] <name> <domain>
    • 是否须要项目: yes

    在当前项目中创建spider。

    这不过创建spider的一种快捷方法。该方法能够使用预定义好的模板来生成spider。您也能够自己创建spider的源代码文件。

    样例:

    $ scrapy genspider -l
    Available templates:
      basic
      crawl
      csvfeed
      xmlfeed
    
    $ scrapy genspider -d basic
    import scrapy
    
    class $classname(scrapy.Spider):
        name = "$name"
        allowed_domains = ["$domain"]
        start_urls = (
            'http://www.$domain/',
            )
    
        def parse(self, response):
            pass
    
    $ scrapy genspider -t basic example example.com
    Created spider 'example' using template 'basic' in module:
      mybot.spiders.example
    

    crawl

    • 语法: scrapy crawl <spider>
    • 是否须要项目: yes

    使用spider进行爬取。

    样例:

    $ scrapy crawl myspider
    [ ... myspider starts crawling ... ]
    

    check

    • 语法: scrapy check [-l] <spider>
    • 是否须要项目: yes

    执行contract检查。

    样例:

    $ scrapy check -l
    first_spider
      * parse
      * parse_item
    second_spider
      * parse
      * parse_item
    
    $ scrapy check
    [FAILED] first_spider:parse_item
    >>> 'RetailPricex' field is missing
    
    [FAILED] first_spider:parse
    >>> Returned 92 requests, expected 0..4
    

    list

    • 语法: scrapy list
    • 是否须要项目: yes

    列出当前项目中全部可用的spider。

    每行输出一个spider。

    使用样例:

    $ scrapy list
    spider1
    spider2
    

    edit

    • 语法: scrapy edit <spider>
    • 是否须要项目: yes

    使用 EDITOR 中设定的编辑器编辑给定的spider

    该命令不过提供一个快捷方式。

    开发人员能够自由选择其它工具或者IDE来编写调试spider。

    样例:

    $ scrapy edit spider1
    

    fetch

    • 语法: scrapy fetch <url>
    • 是否须要项目: no

    使用Scrapy下载器(downloader)下载给定的URL。并将获取到的内容送到标准输出。

    该命令以spider下载页面的方式获取页面。比如。假设spider有 USER_AGENT 属性改动了 User Agent,该命令将会使用该属性。

    因此,您能够使用该命令来查看spider怎样获取某个特定页面。

    该命令假设非项目中执行则会使用默认Scrapy downloader设定。

    样例:

    $ scrapy fetch --nolog http://www.example.com/some/page.html
    [ ... html content here ... ]
    
    $ scrapy fetch --nolog --headers http://www.example.com/
    {'Accept-Ranges': ['bytes'],
     'Age': ['1263   '],
     'Connection': ['close     '],
     'Content-Length': ['596'],
     'Content-Type': ['text/html; charset=UTF-8'],
     'Date': ['Wed, 18 Aug 2010 23:59:46 GMT'],
     'Etag': ['"573c1-254-48c9c87349680"'],
     'Last-Modified': ['Fri, 30 Jul 2010 15:30:18 GMT'],
     'Server': ['Apache/2.2.3 (CentOS)']}
    

    view

    • 语法: scrapy view <url>
    • 是否须要项目: no

    在浏览器中打开给定的URL,并以Scrapy spider获取到的形式展现。 有些时候spider获取到的页面和普通用户看到的并不同样。

    因此该命令能够用来检查spider所获取到的页面。并确认这是您所期望的。

    样例:

    $ scrapy view http://www.example.com/some/page.html
    [ ... browser starts ... ]
    

    shell

    • 语法: scrapy shell [url]
    • 是否须要项目: no

    以给定的URL(假设给出)或者空(没有给出URL)启动Scrapy shell。 查看 Scrapy终端(Scrapy shell) 获取很多其它信息。

    样例:

    $ scrapy shell http://www.example.com/some/page.html
    [ ... scrapy shell starts ... ]
    

    parse

    • 语法: scrapy parse <url> [options]
    • 是否须要项目: yes

    获取给定的URL并使用对应的spider分析处理。

    假设您提供 --callback 选项,则使用spider的该方法处理,否则使用 parse 。

    支持的选项:

    • --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: 显示每一个请求的具体信息

    样例:

    $ scrapy parse http://www.example.com/ -c parse_item
    [ ... scrapy log lines crawling example.com spider ... ]
    
    >>> STATUS DEPTH LEVEL 1 <<<
    # Scraped Items  ------------------------------------------------------------
    [{'name': u'Example item',
     'category': u'Furniture',
     'length': u'12 cm'}]
    
    # Requests  -----------------------------------------------------------------
    []
    

    settings

    • 语法: scrapy settings [options]
    • 是否须要项目: no

    获取Scrapy的设定

    在项目中执行时,该命令将会输出项目的设定值,否则输出Scrapy默认设定。

    样例:

    $ scrapy settings --get BOT_NAME
    scrapybot
    $ scrapy settings --get DOWNLOAD_DELAY
    0
    

    runspider

    • 语法: scrapy runspider <spider_file.py>
    • 是否须要项目: no

    在未创建项目的情况下,执行一个编写在Python文件里的spider。

    样例:

    $ scrapy runspider myspider.py
    [ ... spider starts crawling ... ]
    

    version

    • 语法: scrapy version [-v]
    • 是否须要项目: no

    输出Scrapy版本号。配合 -v 执行时,该命令同一时候输出Python, Twisted以及平台的信息。方便bug提交。

    deploy

    0.11 新版功能.

    • 语法: scrapy deploy [ <target:project> | -l <target> | -L ]
    • 是否须要项目: yes

    将项目部署到Scrapyd服务。

    查看 部署您的项目 。

    bench

    0.17 新版功能.

    • 语法: scrapy bench
    • 是否须要项目: no

    执行benchmark測试。 Benchmarking 。

    自己定义项目命令

    您也能够通过 COMMANDS_MODULE 来加入您自己的项目命令。您能够以 scrapy/commands 中Scrapy commands为例来了解怎样实现您的命令。

    COMMANDS_MODULE

    Default: '' (empty string)

    用于查找加入自己定义Scrapy命令的模块。

    样例:

    COMMANDS_MODULE = 'mybot.commands'
  • 相关阅读:
    【LeetCode】208.实现Trie(前缀树)(java+c++,两种方法实现,详细图解)
    《java入门第一季》之二维数组
    《java入门第一季》之二维数组
    iOS中UITableView分割线左侧顶齐
    open_links_per_instance 和 open_links 参数说明
    《java第一季之入门篇》的想法
    十四个方法提高博客的页面访问量
    Android中的Message机制
    OC中的枚举类型
    解决ADT大量出现"Unexpected value from nativeGetEnabledTags: 0"的问题
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7229789.html
Copyright © 2011-2022 走看看