在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Scrapy 終端(Scrapy shell)
Benchmarking
命令行工具(Command line tools)
下載器中間件(Downloader Middleware)
信號(hào)(Signals)
Telnet 終端(Telnet Console)
初窺 Scrapy
數(shù)據(jù)收集(Stats Collection)
Scrapyd
通用爬蟲(Broad Crawls)
Item Loaders
試驗(yàn)階段特性
Scrapy 入門教程
自動(dòng)限速(AutoThrottle)擴(kuò)展
Settings
Scrapy 終端(Scrapy shell)
下載項(xiàng)目圖片
DjangoItem
調(diào)試(Debugging)Spiders
選擇器(Selectors)
Feed exports
Spiders Contracts
借助 Firefox 來爬取
Logging
Spiders
Ubuntu 軟件包
實(shí)踐經(jīng)驗(yàn)(Common Practices)
安裝指南
Item Exporters
擴(kuò)展(Extensions)
Items
Spider 中間件(Middleware)
異常(Exceptions)
例子
發(fā)送 email
架構(gòu)概覽
常見問題(FAQ)
Jobs:暫停,恢復(fù)爬蟲
核心 API
使用 Firebug 進(jìn)行爬取
Item Pipeline
Link Extractors
Web Service
調(diào)試內(nèi)存溢出

Scrapy 終端(Scrapy shell)

Scrapy 終端是一個(gè)交互終端,供您在未啟動(dòng) spider 的情況下嘗試及調(diào)試您的爬取代碼。 其本意是用來測(cè)試提取數(shù)據(jù)的代碼,不過您可以將其作為正常的 Python 終端,在上面測(cè)試任何的 Python 代碼。

該終端是用來測(cè)試 XPath 或 CSS 表達(dá)式,查看他們的工作方式及從爬取的網(wǎng)頁(yè)中提取的數(shù)據(jù)。 在編寫您的 spider 時(shí),該終端提供了交互性測(cè)試您的表達(dá)式代碼的功能,免去了每次修改后運(yùn)行 spider 的麻煩。

一旦熟悉了 Scrapy 終端后,您會(huì)發(fā)現(xiàn)其在開發(fā)和調(diào)試 spider 時(shí)發(fā)揮的巨大作用。

如果您安裝了 IPython,Scrapy 終端將使用 IPython (替代標(biāo)準(zhǔn) Python 終端)。 IPython 終端與其他相比更為強(qiáng)大,提供智能的自動(dòng)補(bǔ)全,高亮輸出,及其他特性。

我們強(qiáng)烈推薦您安裝 IPython,特別是如果您使用 Unix 系統(tǒng)(IPython 在 Unix 下工作的很好)。 詳情請(qǐng)參考 IPython installation guide 。

啟動(dòng)終端

您可以使用 shell 來啟動(dòng) Scrapy 終端:

scrapy shell <url>

<url> 是您要爬取的網(wǎng)頁(yè)的地址。

使用終端

Scrapy 終端僅僅是一個(gè)普通的 Python 終端(或 IPython)。其提供了一些額外的快捷方式。

可用的快捷命令(shortcut)

  • shelp() - 打印可用對(duì)象及快捷命令的幫助列表
  • fetch(request_or_url) - 根據(jù)給定的請(qǐng)求(request)或 URL 獲取一個(gè)新的 response,并更新相關(guān)的對(duì)象
  • view(response) - 在本機(jī)的瀏覽器打開給定的 response。 其會(huì)在 response 的 body 中添加一個(gè) tag ,使得外部鏈接(例如圖片及 css)能正確顯示。 注意,該操作會(huì)在本地創(chuàng)建一個(gè)臨時(shí)文件,且該文件不會(huì)被自動(dòng)刪除。

可用的 Scrapy 對(duì)象

Scrapy 終端根據(jù)下載的頁(yè)面會(huì)自動(dòng)創(chuàng)建一些方便使用的對(duì)象,例如 Response 對(duì)象及 Selector 對(duì)象(對(duì) HTML 及 XML 內(nèi)容)。

這些對(duì)象有:

  • crawler - 當(dāng)前 Crawler 對(duì)象。
  • spider - 處理 URL 的 spider。對(duì)當(dāng)前 URL 沒有處理的 Spider 時(shí)則為一個(gè) Spider 對(duì)象。
  • request - 最近獲取到的頁(yè)面的 Request 對(duì)象。您可以使用 replace() 修改該 request。或者 使用 fetch 快捷方式來獲取新的 request。
  • response - 包含最近獲取到的頁(yè)面的 Response 對(duì)象。
  • sel - 根據(jù)最近獲取到的 response 構(gòu)建的 Selector 對(duì)象。
  • settings - 當(dāng)前的 Scrapy settings

終端會(huì)話(shell session)樣例

下面給出一個(gè)典型的終端會(huì)話的例子。 在該例子中,我們首先爬取了 http://scarpy.org 的頁(yè)面,而后接著爬取 http://slashdot.org 的頁(yè)面。 最后,我們修改了(Slashdot)的請(qǐng)求,將請(qǐng)求設(shè)置為 POST 并重新獲取, 得到 HTTP 405(不允許的方法)錯(cuò)誤。 之后通過 Ctrl-D(Unix)或 Ctrl-Z(Windows)關(guān)閉會(huì)話。

需要注意的是,由于爬取的頁(yè)面不是靜態(tài)頁(yè),內(nèi)容會(huì)隨著時(shí)間而修改, 因此例子中提取到的數(shù)據(jù)可能與您嘗試的結(jié)果不同。 該例子的唯一目的是讓您熟悉 Scrapy 終端。

首先,我們啟動(dòng)終端:

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

接著該終端(使用 Scrapy 下載器(downloader))獲取 URL 內(nèi)容并打印可用的對(duì)象及快捷命令(注意到以[s]開頭的行):

[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]   sel        <Selector xpath=None data=u'<html>\n  <head>\n    <meta charset="utf-8'>
[s]   settings   <scrapy.settings.Settings object at 0x2bfd650>
[s]   spider     <Spider 'default' at 0x20c6f50>
[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

>>>

之后,您就可以操作這些對(duì)象了:

>>> sel.xpath("http://h2/text()").extract()[0]
u'Welcome to Scrapy'

>>> fetch("http://slashdot.org")
[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x1a13b50>
[s]   item       {}
[s]   request    <GET http://slashdot.org>
[s]   response   <200 http://slashdot.org>
[s]   sel        <Selector xpath=None data=u'<html lang="en">\n<head>\n\n\n\n\n<script id="'>
[s]   settings   <scrapy.settings.Settings object at 0x2bfd650>
[s]   spider     <Spider 'default' at 0x20c6f50>
[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

>>> sel.xpath('//title/text()').extract()
[u'Slashdot: News for nerds, stuff that matters']

>>> request = request.replace(method="POST")

>>> fetch(request)
[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x1e16b50>
...

>>>

在 spider 中啟動(dòng) shell 來查看 response

有時(shí)您想在 spider 的某個(gè)位置中查看被處理的 response, 以確認(rèn)您期望的 response 到達(dá)特定位置。

這可以通過 scrapy.shell.inspect_response 函數(shù)來實(shí)現(xiàn)。

以下是如何在 spider 中調(diào)用該函數(shù)的例子:

import scrapy

class MySpider(scrapy.Spider):
    name = "myspider"
    start_urls = [
        "http://example.com",
        "http://example.org",
        "http://example.net",
    ]

    def parse(self, response):
        # We want to inspect one specific response.
        if ".org" in response.url:
            from scrapy.shell import inspect_response
            inspect_response(response, self)

        # Rest of parsing code.

當(dāng)運(yùn)行 spider 時(shí),您將得到類似下列的輸出:

2014-01-23 17:48:31-0400 [myspider] DEBUG: Crawled (200) <GET http://example.com> (referer: None)
2014-01-23 17:48:31-0400 [myspider] DEBUG: Crawled (200) <GET http://example.org> (referer: None)
[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x1e16b50>
...

>>> response.url
'http://example.org'

接著測(cè)試提取代碼:

>>> sel.xpath('//h1[@class="fn"]')
[]

呃,看來是沒有。您可以在瀏覽器里查看 response 的結(jié)果,判斷是否是您期望的結(jié)果:

>>> view(response)
True

最后您可以點(diǎn)擊 Ctrl-D(Windows 下 Ctrl-Z)來退出終端,恢復(fù)爬取:

>>> ^D
2014-01-23 17:50:03-0400 [myspider] DEBUG: Crawled (200) <GET http://example.net> (referer: None)
...

注意: 由于該終端屏蔽了 Scrapy 引擎,您在這個(gè)終端中不能使用 fetch 快捷命令(shortcut)。 當(dāng)您離開終端時(shí),spider 會(huì)從其停下的地方恢復(fù)爬取,正如上面顯示的那樣。