首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新打包Scrapy Spider项目

重新打包Scrapy Spider项目
EN

Stack Overflow用户
提问于 2012-07-23 23:51:30
回答 1查看 265关注 0票数 1

为了保持条理清晰,我确定爬行器将填充三个item类。

每个item类都有各种填充的字段。

代码语言:javascript
复制
class item_01(Item):
    item1 = Field()
    item2 = Field()
    item3 = Field()

class item_02(Item):
    item4 = Field()
    item5 = Field()

class item_03(Item):
    item6 = Field()
    item7 = Field()
    item8 = Field()

有多个页面要抓取相同的项目。在爬虫中,我使用XPathItemLoader来填充“容器”。

目标是将这些项传递到mysql管道,以填充单个表。但这里有个问题。

当我产生三个容器(每页)时,它们被作为三个单独的容器传递到管道中。它们作为自己的BaseItem遍历管道,只填充mysql表中自己的部分,将其他列保留为“NULL”。

我想要做的是将这三个容器重新打包到一个BaseItem中,这样它们就可以作为一个单独的项目传递到管道中。

有没有人对重新包装这些商品有什么建议?要么在蜘蛛中,要么在管道中?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-24 00:56:52

我这样做是为了推动事情的发展,但如果有人可以改进或暗示更好的解决方案,请分享它。

如下所示在爬行器中加载我的项目:

代码语言:javascript
复制
items = [item1.load_item(), item2.load_item(), item3.load_item()]  

然后我在爬行器外部定义了一个函数:

代码语言:javascript
复制
def rePackIt(items):
    rePackage = rePackageItems()
    rePack = {}
    for item in items:
        rePack.update(dict(item))

    for key, value in rePack.items():
        rePackage.fields[key] = value
    return rePackage  

items.py中,我添加了:

代码语言:javascript
复制
class rePackageItems(Item):
    """Repackage the items"""
    pass  

在爬虫完成抓取页面并加载条目后,我会产生:

代码语言:javascript
复制
yield rePackIt(items)  

这就把我带到了pipelines.py

process_item中,为了解压该项目,我执行了以下操作:

代码语言:javascript
复制
def process_item(self, item, spider):
        items = item.fields

items现在是一个字典,其中包含从爬行器中提取的所有字段,然后我使用这些字段插入到单个数据库表中

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11616014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档