scrapy 2.3 蜘蛛合約

2021-06-16 10:08 更新

測(cè)試蜘蛛會(huì)變得特別煩人,雖然沒有什么可以阻止你編寫單元測(cè)試,但是任務(wù)會(huì)很快變得很麻煩。Scrapy提供了一種綜合的方法,可以通過合同的方式測(cè)試你的蜘蛛。

這允許您通過硬編碼一個(gè)示例URL來測(cè)試蜘蛛的每個(gè)回調(diào),并檢查回調(diào)如何處理響應(yīng)的各種約束。每個(gè)合同的前綴都是 ?@? 并包含在docstring中。請(qǐng)參見以下示例:

def parse(self, response):
    """ This function parses a sample response. Some contracts are mingled
    with this docstring.

    @url http://www.amazon.com/s?field-keywords=selfish+gene
    @returns items 1 16
    @returns requests 0 0
    @scrapes Title Author Year Price
    """

此回調(diào)使用三個(gè)內(nèi)置合同進(jìn)行測(cè)試:

classscrapy.contracts.default.UrlContract

本合同 (@url )設(shè)置檢查此蜘蛛的其他合同條件時(shí)使用的示例URL。本合同是強(qiáng)制性的。運(yùn)行檢查時(shí),忽略所有缺少此協(xié)定的回調(diào):

@url url
classscrapy.contracts.default.CallbackKeywordArgumentsContract

本合同 (@cb_kwargs )設(shè)置 ?cb_kwargs? 示例請(qǐng)求的屬性。它必須是有效的JSON字典。:

@cb_kwargs {"arg1": "value1", "arg2": "value2", ...}
classscrapy.contracts.default.ReturnsContract

本合同 (@returns )為蜘蛛返回的項(xiàng)和請(qǐng)求設(shè)置下限和上限。上限是可選的:

@returns item(s)|request(s) [min [max]]
classscrapy.contracts.default.ScrapesContract

本合同 (@scrapes )檢查回調(diào)返回的所有項(xiàng)是否具有指定的字段::

@scrapes field_1 field_2 ...

使用 ?check? 運(yùn)行合同檢查的命令。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)