Scrapy中间件为项目添加额外的“魔法”字段

scrapy-magicfields的Python项目详细描述


https://travis-ci.org/scrapy-plugins/scrapy-magicfields.svg?branch=masterhttps://codecov.io/gh/scrapy-plugins/scrapy-magicfields/branch/master/graph/badge.svg

这是一个向项目添加额外字段的小蜘蛛中间件, 基于配置设置MAGIC_FIELDSMAGIC_FIELDS_OVERRIDE

安装

使用pip

$ pip install scrapy-magicfields

配置

  1. 通过将magicfieldsmiddleware包含在^{tt4}中来添加它$ 在settings.py文件中:

    SPIDER_MIDDLEWARES = {
        'scrapy_magicfields.MagicFieldsMiddleware': 100,
    }
    

    这里,priority100只是一个例子。 根据您可能已经启用的其他中间件设置其值。

  2. 使用MAGIC_FIELDS(和可选的MAGIC_FIELDS_OVERRIDE)启用中间件 在您的setting.py中。

用法

设置MAGIC_FIELDSMAGIC_FIELDS_OVERRIDE都是dicts:

  • 键是目标字段名,
  • 它们的值是一个接受magic变量的字符串, -由开始的$(美元符号)标识, 它将在运行时被相应的值替换。

一些magic变量也接受参数,并在magic名称之后指定, 使用:(列)作为分隔符。

您可以使用MAGIC_FIELDS设置项目全局magics, 并使用MAGIC_FIELDS_OVERRIDE为特定的蜘蛛调整它们。

如果有多个参数,它们必须用,(逗号)分隔。 所以一般的魔法格式是:

$<magic name>[:arg1,arg2,...]

支持的幻数变量

$time
'%Y-%m-%d%H:%M:%S'格式擦除项目的UTC时间戳。
$unixtime
unixtime(从纪元开始的秒数,即time.time()) 刮掉物品的时间。
$isotime
刮除项目的UTC时间戳,格式为'%Y-%m-%dT%H:%M:%S"
$spider
后面必须跟一个参数, 它是蜘蛛属性的名称(就像传递给它的参数一样)。
$env
环境变量的值。 它接受变量的名称作为参数。
$jobid
作业ID(快捷方式为$env:SCRAPY_JOB
$jobtime
作业开始的UTC时间戳,格式为'%Y-%m-%d%H:%M:%S'
$response

访问某些响应属性。

$response:url
从中提取项目的URL。
$response:status
响应http状态。
$response:headers
响应http头。
$setting
访问给定的scrapy设置。它接受一个参数:设置的名称。
$field
允许将一个字段的值复制到另一个字段 它的参数是源字段。 如果使用已填充的字段作为源,则效果是不可预测的。 使用魔法场。

示例

以下配置将为每个刮削的项目添加两个字段:

  • 'timestamp',其中将填充字符串'item scraped at <scraped timestamp>'
  • 以及'spider',它将包含蜘蛛名
MAGIC_FIELDS = {
    "timestamp": "item scraped at $time",
    "spider": "$spider:name"
}

以下配置将把url复制到sku字段:

MAGIC_FIELDS = {
    "sku": "$field:url"
}

magics还接受一个正则表达式参数,该参数允许 只分配魔法产生的部分价值。 必须使用r''符号指定它。

假设您的项目的url看起来像'http://www.example.com/product.html?item_no=345' 您只想给sku字段分配项目号。

下面的示例与前一个示例类似,但有第二个正则表达式参数, 将执行任务:

MAGIC_FIELDS = {
    "sku": "$field:url,r'item_no=(\d+)'"
}

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

推荐PyPI第三方库


热门话题
java在Hibernate中从两个具有不同功能的表(postgreSQL)映射一个实体   java jfreechart需要自定义Y轴,以便打印   Java:从外部获取类。罐子   java如何获取Appium服务器日志   具有完全相同内容的java重写函数会导致错误   java消息的类路径是什么。属性(如果在依赖项jar中)   循环/相等的java问题==   java如何使用ionic cordova angularjs将所选图像发送到spring controller以保存到服务器?   库中的java语言环境数据   java从JSON webservice检索安卓中的字节[]   调试如何从Java中的类调试方法?   java将日期字符串切割成变量   无法使用java附加到文件?