Scrapy shell 可用于抓取数据并提示错误代码,而无需使用蜘蛛。 Scrapy shell的主要目的是测试所提取的代码,XPath或CSS表达式。它还用来从中指定刮取数据的网页。
	
			配置Shell
		
		shell 可以通过安装 IPython(用于交互式计算)控制台,它是强大的交互式的Shell,提供自动完成,彩色输出等功能。
	
如果您在UNIX平台上工作,那么最好安装 IPython。 如果有IPython的无法访问,您也可以使用bpython。
		您可以通过设置 SCRAPY_PYTHON_SHELL 环境变量或者在 scrapy.cfg 文件中定义配置 Shell,如下图所示:
	
[settings] shell = bpython
启动Shell
		Scrapy shell 可以用下面的命令来启动:
	
scrapy shell <url>
		url 是指定为需要进行数据抓取的URL
	
使用Shell
		shell提供一些附加快捷方式和Scrapy对象,如下所述:
	
			可用快捷方式
		
		shell提供可在项目中使用的快捷方式如下:
	
| S.N | 
 
						快捷方式和说明
					 
 | 
|---|---|
| 1 | 
					shelp() 
						它提供了可用对象和快捷方式的帮助选项
					 
 | 
| 2 | 
					fetch(request_or_url) 
						它会从请求或URL的响应收集相关对象可能的更新
					 
 | 
| 3 | 
					view(response) 可以在本地浏览器查看特定请求的响应,观察和正确显示外部链接,追加基本标签到响应正文。  | 
			可用Scrapy对象
		
		shell在项目中提供以下可用Scrapy对象:
	
| S.N. | 
 
						对象和说明
					 
 | 
|---|---|
| 1 | 
					crawler 
						它指定当前爬行对象
					 
 | 
| 2 | 
					spider 
						如果对于当前网址没有蜘蛛,那么它将通过定义新的蜘蛛处理URL或蜘蛛对象
					 
 | 
| 3 | 
					request 
						它指定了最后采集页面请求对象
					 
 | 
| 4 | 
					response 
						它指定了最后采集页面响应对象
					 
 | 
| 5 | 
					settings 
						它提供当前Scrapy设置
					 
 | 
			Shell会话示例
		
		让我们试着刮取 scrapy.org 网站,然后开始从 yiibai.com 抓取数据,如下所述:
	
		在继续之前,我们将首先启动shell,执行如下面的命令:
	
scrapy shell 'http://scrapy.org' --nolog
		当使用上面的URL,Scrapy将显示可用的对象:
	
[s] Available Scrapy objects:
[s]   crawler    
[s]   item       {}
[s]   request    
[s]   response   <200 http://scrapy.org>
[s]   settings   
[s]   spider     
[s] Useful shortcuts:
[s]   shelp()           Provides available objects and shortcuts with help option
[s]   fetch(req_or_url) Collects the response from the request or URL and associated objects will get update
[s]   view(response)    View the response for the given request
		接着,对象的工作开始,如下所示:
	
>> response.xpath('//title/text()').extract_first()
u'Scrapy | A Fast and Powerful Scraping and Web Crawling Framework'
>> fetch("http://reddit.com")
[s] Available Scrapy objects:
[s]   crawler    
[s]   item       {}
[s]   request    
[s]   response   <200 https://www.yiibai.com/>
[s]   settings   
[s]   spider     
[s] Useful shortcuts:
[s]   shelp()           Shell help (print this help)
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects
[s]   view(response)    View response in a browser
>> response.xpath('//title/text()').extract()
[u'reddit: the front page of the internet']
>> request = request.replace(method="POST")
>> fetch(request)
[s] Available Scrapy objects:
[s]   crawler    
...
			从Spider检查响应调用Shell
		
		您可以检查它是由蜘蛛处理的响应,只有期望得到的响应。
	
		例如:
	
import scrapy
class SpiderDemo(scrapy.Spider):
    name = "spiderdemo"
    start_urls = [
        "http://yiibai.com",
        "http://yiibai.org",
        "http://yiibai.net",
    ]
    def parse(self, response):
        # You can inspect one specific response
        if ".net" in response.url:
            from scrapy.shell import inspect_response
            inspect_response(response, self)
		正如上面的代码所示,可以从蜘蛛调用shell,通过使用下面的函数来检查响应:
	
scrapy.shell.inspect_response
		现在运行的蜘蛛,应该会得到如下界面:
	
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200) (referer: None) 2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200) (referer: None) 2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200) (referer: None) [s] Available Scrapy objects: [s] crawler ... >> response.url 'http://yiibai.org'
		您可以使用下面的代码检查提取的代码是否正常工作:
	
>> response.xpath('//div[@class="val"]')
It displays the output as
[]
		上面一行只显示空白输出。现在可以调用 shell 来检查响应,如下图所示:
	
>> view(response) It displays the response as True