Scrapy中间件为项目添加额外的“魔法”字段
scrapy-magicfields的Python项目详细描述
这是一个向项目添加额外字段的小蜘蛛中间件, 基于配置设置MAGIC_FIELDS和MAGIC_FIELDS_OVERRIDE。
安装
使用pip:
$ pip install scrapy-magicfields
配置
通过将magicfieldsmiddleware包含在^{tt4}中来添加它$ 在settings.py文件中:
SPIDER_MIDDLEWARES = { 'scrapy_magicfields.MagicFieldsMiddleware': 100, }
这里,priority100只是一个例子。 根据您可能已经启用的其他中间件设置其值。
使用MAGIC_FIELDS(和可选的MAGIC_FIELDS_OVERRIDE)启用中间件 在您的setting.py中。
用法
设置MAGIC_FIELDS和MAGIC_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+)'" }