Scrapy Shell

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

使用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