Scrapy学习笔记(3)--Command line tool(命令行工具)

Command line tool

Scrapy是在命令行中控制的,比如创建project,运行爬虫等。Scrapy提供了很多的参数和命令。

PS:所有括号中的指令都和前边的对应指令等价,或者是缩写形式

使用scrapy tool

scrapy <command> [options] [args]
如果你直接输入scrapy,它会显示帮助,即命令参数,你也可以输入scrapy -h来查看,或者scrapy <command> -h来显示某个命令的帮助

startproject

语法:
scrapy startproject project_name [project_dir]
需求:
不需要项目(此处当作废话处理)

将在指定目录[目录可选,默认当前目录]创建一个指定名称的项目
下一步你就可以cd project_dir进入创建的项目目录,如果是默认目录,创建完成后下一步cd project_mame即可

例子:
scrapy startproject HelloScrapy D:\\CrazyScrapy\\

cd D:\\CrazyScrapy\\

genspider

语法:
scrapy genspider [-t template] <name> <domain>
需求:
不需要有项目

在当前目录或项目目录中的spiders文件夹下创建一个爬虫,如果是在项目中创建,那么它的name将在项目中设置为spider的name<domain>用来生成spider中的allowed_domainsstart_urls属性。下列具体参数中括号的指令与前面的缩写指令等价:

  • scrapy genspider -h (–help)显示帮助
  • scrapy genspider -l (–list)显示可用的模板(templates),有basic、crawl、csvfeed、xmlfeed四种,默认basic,最简的那种
  • scrapy genspider -e (–edit)创建后编辑,前提是设置好编辑器,以后设置里会讲
  • scrapy genspider -d (–dump=TEMPLATE),参数是模板,使用这个不会创建一个爬虫,而是在命令行中展示它的模板代码,也就是预览
  • scrapy genspider -t (–template=TEMPLATE),参数是模板,生成一个对应模板的爬虫,-d是预览,-t是生成
  • scrapy genspider --force 如果指定的spider已经存在,那么就用指定的模板覆盖它!(默认basic模板)

ps:这些知道就好,因为它只是创建爬虫的命令,你完全可以自己手动创建一个spider文件,重要的还是如何写爬虫的代码,当然你可以都试一试,关于那四种模型,以后学到Spider会接触到

例子:
scrapy genspider -t xmlfeed spider1 "baidu.com"

crawl

语法:
scrapy crawl <spider>
需求:
需要项目

执行爬虫,注意使用该命令要在项目目录里。

  • scrapy crawl -a NAME=VALUE 设置爬虫的参数(可能会重复)
  • scrapy crawl --output=FILE (-o FILE) 将爬下来的item存储(dump)到指定文件
  • scrapy crawl --output-format=FORMAT (-t FORMAT) 按格式存储item到指定文件,常见的有FILE.json、FILE.jl格式等

例子:
scrapy crawl spider1 -t spider1_item.json

check

语法:
scrapy check [-l] <spider>
需求:
需要项目

运行检查,即检查你的spiders是否有代码错误,需要在项目目录中使用:

  • scrapy check 检查所有的spiders,后边跟上spider名字会针对某个spider检查
  • scrapy check -l (–list)只会列出contracts,但是不检查
  • scrapy check -v (–verbose)打印出所有spiders的contracts测试结果,相当于scrapy check

例子:
>scrapy check
>...
D:\Crazy\Hello\HelloProject \spiders\spider2.py, line12
yield i:::
SyntaxError: invalid character in identifier

没错,我打了三个中文冒号,然后报错,被它检查出来了。

list

语法:
scrapy list
需求:
需要项目

作用:列出所有的spider
例子:
>scrapy list
spider1
spider2

edit

语法:
scrapy edit <spider>
需求:
需要项目

在设置过的EDITOR中打开。没有设置过的话就默认了。当然有IDE的话这个命令用不着,这里只是提一下,具体怎么设置以后再说。

fetch

语法:
scrapy fetch [options] <url>
需求:
不需要项目

利用Scrapy downloader从网页中提取内容(body,页面源代码)保存到本地(.html文件,具体目录看浏览器上面显示的地址)并且打印到标准输出,你可以使用--nolog指令来取消打印日志(这个指令是Global Options,所有命令都有的,之后会介绍)。如果你是在一个项目中执行,那么它会先找你的项目的settings.py中是否设置了headers,如果有,则用你设置的headers进行提取。以下是指令:

  • scrapy fetch --spider=SPIDER <url> 用指定的spider来获取
  • scrapy --headers <url> 打印HTTP headers而不是页面的body
  • scrapy --no-redirect <url> 不要处理HTTP 3xx状态码和按原样打印响应,就是比如302、303等状态吗不要处理、打印。

例子:
scrapy fetch --nolog --headers "http://cn.bing.com/"
...显示HTTP的headers相关信息...

view

语法:
scrapy view <url>
需求:
不需要项目

用你的浏览器打开指定的url链接,而且默认不会加载你的插件,货真价实的就是你的spider看到的页面。你可以试一下,看看淘宝网,结果不是很理想,因为淘宝的界面都是即时生成的、动态的,要爬取这样的网页还需要模拟工具比如PhantomJS,这个就先不提。下面是view的指令:

  • --spider=SPIDER 以爬虫的视角来看
  • --no-redirect 同fetch。

例子:
scrapy view --spider=spider1 "http://dict.youdao.com/"
将用你的默认浏览器打开该爬虫视角的页面

shell

语法:
scrapy shell [url]
需求:
不需要项目

shell是个很强大的功能,对于你解析HTML信息十分有用,先讲一下参数,然后再细说:

  • scrapy shell -c CODE <url> 将你的CODE代码在shell中执行之后退出shell,记得给你的代码加上引号,并且不要和你代码中用到的引号冲突。其实直接在shell中操作会更好。
  • scrapy shell --spider=SPIDER用指定的爬虫获取信息,然后进入shell
  • scrapy shell --no-redirect同fetch

在shell中,response就是你对你指定的url链接发出请求后返回的信息,就相当于整个页面的源代码。接下来你就需要使用选择器(Selectors)来模拟提取信息,不断地测试。选择器,比如CSS Selectors,XPath,re()正则表达式,当然BeautifulSoup也是可以的。你完全可以把这个环境当成python的shell,在里面进行测试,找到合适的选择路径,然后写入Spider中。

例子:
>scrapy shell "http://cn.bing.com/"
# log以及打开shell
>>>a='http://cn.bing.com/'+response.xpath('//li[@id="scpt3"]/a[@id]/@href').extract_first()
>>>print(a)

parse

语法:
scrapy parse <url> [options]
需求:
需要项目

用爬虫解析url链接并且打印结果

  • scrapy parse --spider=SPIDER <url> 用指定的爬虫而不是寻找一个
  • scrapy parse -a NAME=VALUE <url> 设定爬虫的参数(可能会有重复的)
  • scrapy parse --pipelines <url> 通过pipelines处理items
  • scrapy parse --nolinks <url> 不显示可以再次请求(follow)的链接
  • scrapy parse --noitems <url> 不显示爬取到的items
  • scrapy parse --nocolour <url> 不要使用代码高亮来颜色化输出
  • scrapy parse -r <url> (–rules)使用CrawlSpider rules来发现callback(回调)
  • scrapy parse -c CALLBACK <url> (–callback=CALLBACK)使用指定的callback回调来解析(parse),而不是自己找
  • scrapy parse -d DEPTH <url> (–depth=DEPTH) 解析请求的最大深度,默认1
  • scrapy parse -v <url> (–verbose) 一个接一个地打印每一层深度

例子(用的是我已经写过的项目):
D:\CrazyScrapy\FamousQuotes\FamousQuotes>scrapy parse --spider=quotes -v "http://www.dailyenglishquote.com/"
这里写图片描述

settings

语法:
scrapy settings [options]
需求:
不需要项目

获得settings的值。如果在一个项目中使用,它将展示项目的setting value, 否则将会展示,默认的Scrapy settings值,下面的SETTING都是settings.py中具体的某一项设置的名字,你可以

  • scrapy settings --get=SETTING 直接(raw)打印setting的值
  • scrapy settings --getbool=SETTING 以boolean形式打印
  • scrapy settings --getint=SETTING 以整型数据打印
  • scrapy settings --getfloat 以浮点型打印
  • scrapy settings --getlist 以列表的形式打印

例子:
scrapy settings --get=BOT_NAME 打印项目名
scrapy settings --getbool=ROBOTSTXT_OBEY 打印是否遵循robots协议
scrapy settings --getfloat=DOWNLOAD_DELAY打印下载器在下载同一个网站下一个页面前需要等待的时间

ps:关于settings.py以后还会再深入

runspider

语法:
scrapy runspider <spider_file.py>
需求:
不需要项目

不需要创建项目就可以跑爬虫,简单易懂:

  • scrapy runspider -a NAME=VALUE <spider_file.py> 设定爬虫的参数(可能会有重复)
  • scrapy runspider --output=FILE <spider_file.py> (-o FILE) dump(存储)爬下来的item到指定的文件中;使用-来标准输出
  • scrapy runspider --output-format=FORMAT (-t FORMAT)格式化使用-o输出

scrapy runspider spider4.py
...crawling log...

version

语法:
scrapy version [-v]
需求:
不需要项目

显示scrapy的版本。如果使用了-v参数,同时也会打印Python版本、Twisted版本和Platform info(平台信息)等,下面是我的信息:
这里写图片描述
大家可以参考一下。Twisted和lxml库是我手动下载的,因为之前下载scrapy的时候出了一些问题。等以后有更多的需求再换电脑和系统 :)

bench

语法:
scrapy bench
需求:
不需要项目

运行一个快速的基准测试,反应当前爬虫的一些基本数据。

Global Options(通用的参数/可选项)

这个是以上命令的通用命令:

  • --logfile=FILE 日志文件。如果省略了stderr(标准错误输出)将被使用
  • --loglevel=LEVEL (-L LEVEL) 日志的LEVEL,默认:INFO
  • --nolog 不会显示日志信息(log)
  • --profile=FILE 写入python cProfile stats到文件中
  • --pidfile-FILE 写入process ID到文件中
  • --set=NAME=VALUE (-s NAME=VALUE) 设定/重写 setting(可能会有重复)
  • --pdb enable pdb on failure(使程序数据库文件失效)

PS:关于scrapy的自定义项目命令(Custom project commands),你可以通过使用COMMANDS_MODULE setting来加入你自己的项目命令。但是由于我的水平还不够,所以在这里我不打算叙述。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值