在输出之前从Scrapy爬网中分割数据的正确方法是什么?

时间:2016-03-03 17:21:45

标签: python scrapy

如果Scrapy退出并获取这些数据:

items[{'name': dog, cat, mouse, biff},
      {'name': horse, mule, donkey, gerald},
      {'name': lizard, snake, iguana, horace}]

我需要将'name'简化为第一项,例如:

items[{'name': dog},{'name': horse},{'name': lizard}]

这是使用装载机还是管道完成的?在爬网之后但在输出之前在Scrapy中操作数据的最佳方法是什么?

更新:感谢您的提示。通过将以下建议和此代码组合在一个管道中,我能够解决这个问题:

class filterImage(object):

def process_item(self, item, spider):

        names = ''
        if item['name']:
            names = item['name'].split(' ')[0]
            item['name'] = names
            return item
        else:
            raise DropItem()

2 个答案:

答案 0 :(得分:0)

在你的解析程序中只是一个简单的字符串抨击,不需要过于复杂化。

items = [{'name': 'dog, cat, mouse, biff'},
      {'name': 'horse, mule, donkey, gerald'},
      {'name': 'lizard, snake, iguana, horace'}]

l = []

for item in items:
    l.append({'name': item['name'][0:item['name'].find(',')]})

print l

>>>[{'name': 'dog'}, {'name': 'horse'}, {'name': 'lizard'}]

将它放在item中并将其收藏。

答案 1 :(得分:0)

管道中的这段代码可以解决问题:

      class filterImage(object):

      def process_item(self, item, spider):
             names = ''
             if item['name']:
                   names = item['name'].split(' ')[0]
                   item['name'] = names
                   return item
              else:
                   raise DropItem()