AlexTheBoy
AlexTheBoy

Reputation: 15

Adding fields to item in scrapy from list

I have a long list of fields to add to a scrapy item but can't figure out how to do it. Basically I am trying to get the output of

class myItem(scrapy.Item):
    a = scrapy.field()
    b = scrapy.field()

But I want to create it from a list like

['a','b']

I tried

fields = ['a','b']

def generateFields(fields):  
    item = myItem()
    for field in fields:
        field = scrapy.Field()
    return item

But that didn't work. Thanks!

Upvotes: 0

Views: 1140

Answers (1)

Michael Savchenko
Michael Savchenko

Reputation: 1445

You can manage it by using python magic method __dict__ pretty much as:

fields = ['a', 'b', 'c']
class MyItem(scrapy.Item):
    def __init__(self):
        for f in fields:
            self.__dict__[f] = scrapy.field()

my_item = MyItem()

And so on... Seems that my previous comment is valid for usual python classes, not for scrapy.Item class. Following code is working:

from scrapy import Item, Field

fields = ['a', 'b', 'c']

def generate_item(fields):
    item = Item()
    for f in fields:
        item.fields[f] = Field()
    return item

 item_instance = generate_item(fields)
 item_instance['a'] = 'some_value'
 item_instance['b'] = 12
 print(item_instance)

Upvotes: 3

Related Questions