结合scrapy 官方文档,进行学习,并整理了部分自己学习实践的内容

Scrapy是通过 scrapy 命令行工具进行控制的。 这里我们称之为 “Scrapy tool” 以用来和子命令进行区分。 对于子命令,我们称为 “command” 或者 “Scrapy commands”。

Scrapy tool 针对不同的目的提供了多个命令,每个命令支持不同的参数和选项。

默认的Scrapy项目结构

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

虽然可以被修改,但所有的Scrapy项目默认有类似于下边的文件结构:

scrapy.cfg
myproject/__init__.pyitems.pypipelines.pysettings.pyspiders/__init__.pyspider1.pyspider2.py...

scrapy.cfg 存放的目录被认为是 项目的根目录 。该文件中包含python模块名的字段定义了项目的设置。例如:

[settings]
default = myproject.settings

使用 scrapy 工具

您可以以无参数的方式启动Scrapy工具。该命令将会给出一些使用帮助以及可用的命令:

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

如果您在Scrapy项目中运行,当前激活的项目将会显示在输出的第一行。上面的输出就是响应的例子。如果您在一个项目中运行命令将会得到类似的输出:

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

创建项目

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

scrapy startproject ScrapyTest

该命令将会在 ScrapyTest目录中创建一个Scrapy项目。

接下来,进入到项目目录中:

cd ScrapyTest

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

简单加一句,在pycharm 中的终端同样支持windows命令操作。

创建后的项目结构如下,此时还没有创建spider

控制项目

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

比如,通过命令行或是终端在项目下创建一个新的spider:

scrapy genspider spiderDemo domainTest

创建后的目录结构如下

自动生成的代码如下

有些Scrapy命令(比如 crawl)要求必须在Scrapy项目中运行。 您可以通过下边的 commands reference 来了解哪些命令需要在项目中运行,哪些不用。

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

可用的工具命令(tool commands)

该章节提供了可用的内置命令的列表。每个命令都提供了描述以及一些使用例子。您总是可以通过运行命令来获取关于每个命令的详细内容:

scrapy

scrapy <command> -hscrapy genspider -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的源码文件。

例子:

#使用命令 参数 -l  查看 spider 模板

scrapy genspider -l#输出结果为模板名称
Available templates:basiccrawlcsvfeedxmlfeed

查看spider模板源代码

#使用 命令加上参数 ‘-d’,以及模板名称

scrapy genspider -d crawl#输出模板信息# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Ruleclass $classname(CrawlSpider):name = '$name'allowed_domains = ['$domain']start_urls = ['http://$domain/']rules = (Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),)def parse_item(self, response):i = {}#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()#i['name'] = response.xpath('//div[@id="name"]').extract()#i['description'] = response.xpath('//div[@id="description"]').extract()return i

#通过命令加参数 -t 模板名称  spiderName [domainName]  创建 spider

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 ... ]

如下图:执行

scrapy crawl TieBaSpider -o items.json 即可将 爬取的数据存放到items.json文件中

scrapy crawl TieBaSpider -o filename.fileformat(文件格式)

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'

转载于:https://www.cnblogs.com/BlueSkyyj/p/7667742.html

Python -- Scrapy 命令行工具(command line tools)相关推荐

  1. Mac OS X中安装命令行工具Command Line Tools(无Xcode)

    Mac OS X中安装命令行工具Command Line Tools(无Xcode) 简介 喜欢通过终端访问更传统的Unix工具包的Mac用户(大部分是程序员),都会选择安装Xcode IDE的可选命 ...

  2. 命令行工具(Command line tools)

    为什么80%的码农都做不了架构师?>>>    默认的Scrapy项目结构 在开始对命令行工具以及子命令的探索前,让我们首先了解一下Scrapy的项目的目录结构. 虽然可以被修改,但 ...

  3. MAC OS 如何安装命令行工具:Command Line Tools

    打开终端输入:xcode-select --install 回车 安装好了测试结果:gcc -v 显示如下: xcode-select: note: install requested for com ...

  4. python工具是什么-使用Python编写命令行工具有什么好的库?

    使用Python编写命令行工具的库很多,我最推荐的还是Google Fire Hello World 要介绍Fire是什么,看一个简单的例子就明白了 # calc.py import fire cla ...

  5. TexturePacker命令行使用(command line)

    TexturePacker是一个非常好用的小图合并工具,介绍它的文章非常多,多数都是使用GUI工具的,但是: 如果原始图片发生了改变,我们就需要重新手动拼接一下,麻烦. 使用GUI界面非常不高端,我高 ...

  6. Python scrapy 命令行传参 以及发送post请求payload参数

    class SciencedirectspiderSpider(scrapy.Spider):name = 'sciencedirectspider'allowed_domains = ['scien ...

  7. 教你写一个可以找到.m文件所有接口名的命令行工具

    项目github 出发点 今天工作中写了一个工具类,在.m中完成所有功能后,发觉把所有接口从.m中拷贝到.h中声明,好麻烦啊,所以就考虑写个命令行工具来做这些工作. 想要达到的结果 我们设计这个小工具 ...

  8. android安装命令行工具下载,Command line tools下载-Command line tools(命令行工具)下载 v1.0官方版--pc6下载站...

    Commandlinetools命令行工具,如果你不需要AndroidStudio,你可以使用基本Android命令行工具,你可以使用包含的sdkmanager来下载其他SDK包,这些工具都包含在An ...

  9. python命令行工具_python命令行工具Click快速掌握

    前言 写 Python 的经常要写一些命令行工具,虽然标准库提供有命令行解析工具 Argparse,但是写起来非常麻烦,我很少会使用它.命令行工具中用起来最爽的就是 Click,它是 Flask 的团 ...

最新文章

  1. 【基本操作】主席数统计区间不同颜色个数
  2. oracle 无法弹出图形界面,Xshell 5 不能弹出GUI 图形界面问题
  3. 【报错笔记】sturts2程序运行出现错误:Struts has detected an unhandled exception
  4. 【pyqt5学习】——进度条progressBar
  5. php滚动到指定位置,JQuery插件:ScrollTo平滑滚动到页面指定位置
  6. 费诺编码的gui页面设计_关于页面可视化搭建的一些思考(一)
  7. Java中BigDecimal类型的加减乘除及大小比对
  8. Python入门教程丨1300多行代码,让你轻松掌握基础知识点
  9. 传奇世界手游公益服【剑指轩辕2】服务端搭建源码使用指南
  10. Learning Git Branching笔记总结
  11. 转 适合wince初学者的一些 知识
  12. 动态路由协议之OSPF基本原理、区域划分及配置
  13. 曲率、曲率圆和曲率半径
  14. 新店速递丨白玉兰(商务)酒店赣榆吾悦广场店 正式上线
  15. python绘图 -- 小猪佩奇源码分享
  16. flutter报错: your app to be migrated to the Android embedding v2
  17. C语言到底有多强大?
  18. 产生按指数分布的随机数----摘自csdn
  19. IDEA配置SpringBoot项目热部署
  20. 钉钉的sonar集成通知 dingding-sonar

热门文章

  1. 高版本转低版本_Tekla高版本模型转低版本模型插件
  2. source ubuntu 退出_ubuntu停source、sh、bash、/执行脚本的区别
  3. koa cluster 使用多进程
  4. Warning: Instance created by `useForm` is not connect to any Form element. Forget to pass `form` pro
  5. format控制输出 python_【Python】之format奇技淫巧的输出控制
  6. Android 机型适配之gradient默认渐变方向
  7. genymotion报错Your CPU is incompatible with virtualization technologies
  8. Linux的nm查看动态和静态库中的符号
  9. Cassandra key说明——Cassandra 整体数据可以理解成一个巨大的嵌套的Map MapRowKey, SortedMapColumnKey, ColumnValue...
  10. TFF 官方demo解释