在scrapy spider中维护请求之间持久元值的便捷工具

stickymeta的Python项目详细描述


在 小蜘蛛。可用作spider中间件和spider回调 装饰师。

安装

pip install stickymeta

用法

作为spider中间件

将中间件添加到settings.py

SPIDER_MIDDLEWARES = {
    ...
    'stickymeta.StickyMetaMiddleware': 543,
    ...
}

以及sticky_meta属性,该属性包含 蜘蛛:

class TheSpider(scrapy.Spider):
    name = 'thespider'
    sticky_meta = ('cookiejar', 'foo', 'bar')

对应键的所有值将在 所有的请求和响应。

作为装饰师

@斗杆元数据

from stickymeta import stick_meta

保留作为装饰器参数传递的键的持久值:

@stick_meta('a', 'b', 'c')
def parse(self, response):
    ...
    yield scrapy.Request(url)

相当于:

def parse(self, response)
    ...
    meta = {
        'a': response.meta['a'],
        'b': response.meta['b'],
        'c': response.meta['c'],
    }
    yield scrapy.Request(url, meta=meta}

@斗杆cj

from stickymeta import stick_cj

stick_meta处理的快捷方式cookiejar作为默认参数 值,因此

@stick_cj('a', 'b', 'c')
def parse(self,response):
    ...

相当于

@stick_meta('cookiejar', 'a', 'b', 'c')
def parse(self,response):
    ...

spider属性sticky_meta也影响到decorators,后面两个 代码片段将以同样的方式处理meta

class TheSpider(scrapy.Spider):
    name = 'thespider'
    sticky_meta = ('a', 'b', 'c')

    @stick_meta()
    def parse(self, response):
        ...
        yield Request(url)

vs

class TheSpider(scrapy.Spider):
    name = 'thespider'

    @stick_meta('a', 'b', 'c')
    def parse(self, response):
        ...
        yield Request(url)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从JSP或HTML向servlet发送多个参数   java方法来查看字符是否在字符数组中   使用带有java的MAC地址连接到设备   java如何将csv文件中的数据打印到secondactivity?   java如何从netbean 7.0.1连接到数据库   java考虑所有可能的类值,用于输出测试分割的预测值。   java我的actionListener调用有什么问题   swing在Java中实现粒子过滤器最有效的方法是什么?   java运行。getFontFamily()为返回null。使用apachepoi的docx文件   一个事务中的java领域循环与每个步骤循环中的一个事务   java日期格式与Spring Boot不兼容   java类冲突。处理   java GridBagLayout不工作   java将图像发送到另一个应用程序