scrapy 2.3 蜘蛛合约

2021-06-16 10:08 更新

测试蜘蛛会变得特别烦人,虽然没有什么可以阻止你编写单元测试,但是任务会很快变得很麻烦。Scrapy提供了一种综合的方法,可以通过合同的方式测试你的蜘蛛。

这允许您通过硬编码一个示例URL来测试蜘蛛的每个回调,并检查回调如何处理响应的各种约束。每个合同的前缀都是 ​@​ 并包含在docstring中。请参见以下示例:

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
    """

此回调使用三个内置合同进行测试:

classscrapy.contracts.default.UrlContract

本合同 (@url )设置检查此蜘蛛的其他合同条件时使用的示例URL。本合同是强制性的。运行检查时,忽略所有缺少此协定的回调:

@url url
classscrapy.contracts.default.CallbackKeywordArgumentsContract

本合同 (@cb_kwargs )设置 ​cb_kwargs​ 示例请求的属性。它必须是有效的JSON字典。:

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

本合同 (@returns )为蜘蛛返回的项和请求设置下限和上限。上限是可选的:

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

本合同 (@scrapes )检查回调返回的所有项是否具有指定的字段::

@scrapes field_1 field_2 ...

使用 ​check​ 运行合同检查的命令。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号