Scrapy shell Scrapy Item Loaders Scrapy Item Pipeline 描述 无需使用蜘蛛,Scrapy外壳就可以用无错代码来废弃数据。Scrapy shell的主要目的是测试提取的代码,XPath或CSS表达式。它还有助于指定从中抓取数据的网页。 配置Shell 可以通过安装IPython: https://ipython.org/(用于交互式计算)控制台来配置该外壳,该控制台是一个功能强大的交互式外壳,可以实现自动完成,彩色输出等。 如果你在Unix平台上工作,那么最好安装IPython。如果IPython无法访问,您也可以使用bpython : https://www.bpython-interpreter.org/。 您可以通过设置名为SCRAPY_PYTHON_SHELL的环境变量或通过如下定义scrapy.cfg文件来配置shell [settings] shell = bpython 启动Shell Scrapy外壳可以使用以下命令启动 - scrapy shell <url> 该 url 指定了需要对其进行数据挖掘的URL。 使用Shell shell提供了一些额外的快捷方式和Scrapy对象,如下表所述 - 可用的快捷方式 Shell在项目中提供以下可用快捷键 - 序号 快捷方式和说明 1 shelp() 它提供了可用的对象和快捷方式以及帮助选项。 2 fetch(request_or_url) 它收集来自请求或URL的响应,并且关联对象将得到正确更新。 3 view(response) 您可以在本地浏览器中查看给定请求的响应,以便观察并正确显示外部链接,它会将基本标记附加到响应主体。 可用的Scrapy对象 Shell在项目中提供了以下可用的Scrapy对象 - Sr.No 对象和描述 1 crawler 它指定当前的搜寻器对象。 2 spider 如果目前的URL没有蜘蛛,那么它将通过定义新的蜘蛛来处理URL或蜘蛛对象。 3 request 它为最后收集的页面指定请求对象。 4 response 它指定最后收集的页面的响应对象。 5 settings 它提供了当前的Scrapy设置。 Shell会话示例 让我们尝试scrapy.org网站,然后开始按照描述从reddit.com中提取数据。 在继续之前,首先我们将启动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 ... 从蜘蛛调用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) 如上面的代码所示,您可以使用以下函数从蜘蛛中调用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 Scrapy Item Loaders Scrapy Item Pipeline