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


热门话题
部署在kubernetes上时,微服务中服务间通信中的java连接超时问题   java Nway合并对2G字符串文件进行排序   java如何使用FlexJson按特定顺序序列化对象和属性   如何在java布尔方法中导入文本文件   swing需要帮助在我的Java GUI中实现用户输入的侦听器   java如何读取枚举中Spring Messagesource的内容?   每个Ajaxcall上(之前和之后)的java Javascript   java compareTo(Comparable)方法对于Comparable类型未定义   带换行符的java Bash输入重定向   使用Spring授权标记检查用户是否登录时发生java错误?   使用大尺寸(100000)数组执行快速排序时出现Java StackOverflower错误   java forEach迭代器标记   Java ClassNotFound异常,Maven依赖项作为JAR   java将HQL转换为SQL查询   java正在将片段列表发送到FragmentPagerAdapter   java onActivityResult应该调用super。onActivityResult   java如果我导入一个超类,我也需要导入它的子类吗?   java是否可以通过openid协议对aadhar进行身份验证