一、命令行工具简介
文档地址:https://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html
Scrapy提供了两种类型的命令。一种必须在Scrapy项目中运行(针对项目(Project-specific)的命令),另外一种则不需要(全局命令)。全局命令在项目中运行时的表现可能会与在非项目中运行有些许差别(因为可能会使用项目的设定)。
全局命令:
startproject
settings
runspider
shell
fetch
view
version
项目(Project-only)命令:
crawl
check
list
edit
parse
genspider
deploy
bench
二、全局命令使用
1. startproject
在 project_name 文件夹下创建一个名为 project_name 的Scrapy项目。
语法: scrapy startproject <project_name>
是否需要项目: no
示例:
例子:
$ scrapy startproject myproject
2. genspider
在当前项目中创建spider。
这仅仅是创建spider的一种快捷方法。该方法可以使用提前定义好的模板来生成spider。您也可以自己创建spider的源码文件。
语法: scrapy genspider [-t template] <name> <domain>
是否需要项目: yes
示例:
$ 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
3. crawl
使用spider进行爬取。
语法: scrapy crawl <spider>
是否需要项目: yes
示例:
$ scrapy crawl myspider
[ ... myspider starts crawling ... ]
4.check
运行contract检查。
语法: scrapy check [-l] <spider>
是否需要项目: yes
示例:
F:\Scrapy\mySpider>scrapy check
----------------------------------------------------------------------
Ran 0 contracts in 0.000s
OK
5. list
列出当前项目中所有可用的spider。每行输出一个spider。
语法: scrapy list
是否需要项目: yes
列出当前项目中所有可用的spider。每行输出一个spider。
示例:
F:\Scrapy\mySpider>scrapy list
BaiduSpider
6. edit
用 EDITOR
中设定的编辑器编辑给定的spider
该命令仅仅是提供一个快捷方式。开发者可以自由选择其他工具或者IDE来编写调试spider。
语法: scrapy edit <spider>
是否需要项目: yes
7. fetch
使用Scrapy下载器(downloader)下载给定的URL,并将获取到的内容送到标准输出。
该命令以spider下载页面的方式获取页面。例如,如果spider有 USER_AGENT 属性修改了 User Agent,该命令将会使用该属性。
因此,您可以使用该命令来查看spider如何获取某个特定页面。
该命令如果非项目中运行则会使用默认Scrapy downloader设定。
语法: scrapy fetch <url>
是否需要项目: no
示例:
$ 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)']}
8. view
语法: scrapy view <url>
是否需要项目: no
在浏览器中打开给定的URL,并以Scrapy spider获取到的形式展现。 有些时候spider获取到的页面和普通用户看到的并不相同。 因此该命令可以用来检查spider所获取到的页面,并确认这是您所期望的。
示例:
$ scrapy view http://www.example.com/some/page.html
[ ... browser starts ... ]
9. parse
获取给定的URL并使用相应的spider分析处理。如果您提供 --callback 选项,则使用spider的该方法处理,否则使用 parse 。
语法: scrapy parse <url> [options]
是否需要项目: yes
支持的选项:
-
--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 -----------------------------------------------------------------
[]
10. settings
获取Scrapy的设定
在项目中运行时,该命令将会输出项目的设定值,否则输出Scrapy默认设定。
语法: scrapy settings [options]
是否需要项目: no
示例:
$ scrapy settings --get BOT_NAME
scrapybot
$ scrapy settings --get DOWNLOAD_DELAY
0
11. runspider
在未创建项目的情况下,运行一个编写在Python文件中的spider。
语法: scrapy runspider <spider_file.py>
是否需要项目: no
示例:
$ scrapy runspider myspider.py
[ ... spider starts crawling ... ]
12. version
输出Scrapy版本。配合 -v 运行时,该命令同时输出Python, Twisted以及平台的信息,方便bug提交。
F:\Scrapy\mySpider>scrapy version
Scrapy 2.0.1
13. deploy
将项目部署到Scrapyd服务。查看 部署您的项目 。
语法: scrapy deploy [ <target:project> | -l <target> | -L ]
是否需要项目: yes
14. bench
运行benchmark测试。
语法: scrapy bench
是否需要项目: no
15、Scrapy Shell 简介
Scrapy shell也称"Scrapy终端",是一个交互终端,使我们可以在未启动spider爬虫的情况下尝试及调试代码。更为方便的是,我们也可以直接用来测试XPath或CSS表达式,而不用import导入相应模块。通过查看其运行的结果,方便了我们分析目标网页,并从中测试我们的表达式是否提取到了数据。该终端是用来测试XPath或CSS表达式,查看他们的工作方式及从爬取的网页中提取的数据。 在编写您的spider时,该终端提供了交互性测试您的表达式代码的功能,免去了每次修改后运行spider的麻烦。
一旦熟悉了Scrapy终端后,您会发现其在开发和调试spider时发挥的巨大作用。
Scrapy终端仅仅是一个普通的Python终端(或 IPython )。
具体使用:
scrapy shell http://quotes.toscrape.com/page/1/
接着该终端(使用Scrapy下载器(downloader))获取URL内容并打印可用的对象及快捷命令(注意到以 [s] 开头的行):
[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x0000017C896F77C8>
[s] item {}
[s] request <GET http://quotes.toscrape.com/page/1/>
[s] response <200 http://quotes.toscrape.com/page/1/>
[s] settings <scrapy.settings.Settings object at 0x0000017C8A096B88>
[s] spider <DefaultSpider 'default' at 0x17c8a40af88>
[s] Useful shortcuts:
[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects 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
常用命令:
shelp() - 打印可用对象及快捷命令的帮助列表
fetch(request_or_url) - 根据给定的请求(request)或URL获取一个新的response,并更新相关的对象
view(response) - 在本机的浏览器打开给定的response。 注意,该操作会在本地创建一个临时文件,且该文件不会被自动删除。
1). shelp
>>> shelp()
[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x0000017C896F77C8>
[s] item {}
[s] request <GET http://quotes.toscrape.com/page/1/>
[s] response <200 http://quotes.toscrape.com/page/1/>
[s] settings <scrapy.settings.Settings object at 0x0000017C8A096B88>
[s] spider <DefaultSpider 'default' at 0x17c8a40af88>
[s] Useful shortcuts:
[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects 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
2). fetch
>>> fetch("http://quotes.toscrape.com/page/1/")
2020-04-14 19:29:11 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/1/> (referer: None)
>>> fetch(request)
2020-04-14 19:31:52 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/1/> (referer: None)
3). view
view(response)
![](https://img.haomeiwen.com/i14929498/d6da17751dd8757a.png)
网友评论