python - Scrapy ItemLoader如何选择返回结果list中的第二个以及以后的值?
PHP中文网
PHP中文网 2017-04-17 17:43:35
[Python讨论组]

在items.py中加入:

from scrapy.loader.processors import TakeFirst
    ......
    # 修改为以下内容
    followees = Field(output_processor=TakeFirst())

其他的不用改变,在spiders中的代码不需要改变

亟待解决:问题是第二个怎么选以及之后的几个?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
大家讲道理

在 scrapy.loader.processors加个类试试。
我是找到TakeFirst类,然后在后面加上

#第二个数据
class TakeSecond(object):

    def __call__(self, values):
        for i in range(len(values)):
            if i == 1 :
                if values[i] is not None and values[i] != '':
                    return values[i]

然后在item.py中导入TakeSecond使用

    name = scrapy.Field(
        input_processor=MapCompose(remove_tags),
        output_processor=Join(),
    )
    price = scrapy.Field(
        input_processor=MapCompose(remove_tags, filter_price),
        output_processor=TakeSecond(),
    )

然后运行结果

>>> from scrapy.loader import ItemLoader
>>> from tutorial.items import Product
>>> il = ItemLoader(item=Product())
>>> il.add_value("price", ['333','444'])
>>> il.load_item()
{'price': u'444'}
迷茫

from scrapy.loader.processors import TakeFirst

......
followees = Field(output_processor=Compose(lambda x: x[1:]))
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号