python - Scrapy ItemLoader如何选择返回结果list中的第二个以及以后的值?
PHP中文网
PHP中文网 2017-04-17 17:43:35
0
2
299

在items.py中加入:

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

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

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

PHP中文网
PHP中文网

认证高级PHP讲师

Antworte allen(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:]))
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!