Scrapy - Shell

描述

Scrapy shell可用于使用无错代码废弃数据,而无需使用蜘蛛. Scrapy shell的主要目的是测试提取的代码,XPath或CSS表达式.它还有助于指定从中抓取数据的网页.

配置Shell

可以通过安装

如果您正在使用Unix平台,那么安装IPython会更好.如果IPython无法访问,您还可以使用 bpython .

您可以通过设置名为SCRAPY_PYTHON_SHELL的环境变量或通过定义scrapy.cfg文件来配置shell,如下所示 :

 
 [settings] 
 shell = bpython

启动Shell

可以使用以下命令启动Scrapy shell :

 
 scrapy shell< url>

url 指定需要抓取数据的网址.

使用Shell

shell提供了一些额外的快捷方式和Scrapy对象,如下表所示 :

可用的快捷方式

Shell在项目中提供以下可用快捷方式 :

Sr.No快捷方式&说明
1

shelp()

它使用帮助选项提供可用对象和快捷方式.

2

fetch(request_or_url)

它收集来自请求或URL的响应,相关对象将得到正确更新.

3

view(response)

你可以在本地浏览器中查看给定请求的响应以进行观察并正确显示外部链接,它会将基本标记附加到响应正文.

可用的Scrapy对象

Shell在项目中提供以下可用的Scrapy对象 :

Sr.No对象&说明
1

抓取工具

它指定当前的抓取工具对象.

2

蜘蛛

如果没有当前URL的spider,然后它将通过定义新蜘蛛来处理URL或蜘蛛对象.

3

请求

它指定了请求对象最后收集的页面.

4

回复

它指定上次收集页面的响应对象.

5

设置

它提供当前的Scrapy设置.

Shell会话示例

让我们尝试抓取scrapy.org网站,然后开始从reddit.co中删除数据如上所述.

在继续前进之前,首先我们将启动shell,如以下命令所示 :

 
 scrapy shell'http://scrapy.org'--nolog

Scrapy将在使用上述URL : 时显示可用对象;

[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x1e16b50>
[s]   item       {}
[s]   request    <GET http://scrapy.org >
[s]   response   <200 http://scrapy.org >
[s]   settings   <scrapy.settings.Settings object at 0x2bfd650>
[s]   spider     <Spider 'default' at 0x20c6f50>
[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.reddit.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     
...

调用来自Spiders的Shell来检查响应

只有当您希望获得响应时,您才能检查从蜘蛛处理的响应.

例如 :

import scrapy 

class SpiderDemo(scrapy.Spider): 
   name = "spiderdemo" 
   start_urls = [ 
      "http://mysite.com", 
      "http://mysite1.org", 
      "http://mysite2.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)

如上面的代码所示,你可以从spiders到shell调用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://mysite2.org'

您可以使用以下代码检查提取的代码是否正常工作 :

 
>> response.xpath('//div [@class ="val"]')

它将输出显示为

 
 []

上面一行只显示空白输出.现在,您可以调用shell来检查响应,如下所示 :

>> view(response)

它显示响应为

 
 True