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第三方库


热门话题
如何为本地和Jenkins执行实现Java配置?   多日志文件创建的java log4j滚动追加器问题   安卓 java替换列表内容或替换引用值本身   java JOptionPane如何不尊重同步?   java Spring状态机访问eventNotAccepted侦听器中的StateContext   Java中的快速排序算法程序   java私有静态最终双精度为0   java中ByteBuffer的clear()方法   同步Java可重入锁的正确锁定/解锁用法   java拦截Couchbaselite中的CRUD操作   用于搜索广告的active directory Java程序   java为什么netty的handler成员变量在使用新handler()处理请求时不重置   java Mockito验证(…)fails“实际上,与此模拟没有任何交互。”按顺序在多个测试运行中   java为什么我的Alarmmanager在终止我的应用程序后不工作?   java如何正确排序groovy列表   一段时间后,java OAuth“401:无效凭据”   使用jtable和数据库在javaswing中进行分页   java如何在Android中将ASCII字符转换为字符串?   java如何运行。来自Javascript的jar方法   java Apache vfs:获取目录的最新更改文件(sftp)