栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

关于Scrapy中的Pipeline管道中 存储mysql后是否处理后返回 item 的问题,个人理解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于Scrapy中的Pipeline管道中 存储mysql后是否处理后返回 item 的问题,个人理解

关于这个问题,我的理解是,假如你需要清洗数据后,在往下值才返回。只是储存的操作就没必要
具体代码结构如下:

class XiangmuPipeline(object):
    def process_item(self, item, spider):
        self.cursor.execute("""insert into t_company_building(
        company_base_id, building_id,title, publishdate, province,
         url,type,company_id)
        values (%s,%s,%s,%s,%s,  %s,%s,%s)""",(
            item['company_base_id'],
            item['building_id'],
            item['title'],
            item['publishdate'],
            item['province'],
            item['url'],
            item['type'],
            item['company_id']))
        id = int(self.cursor.lastrowid)
        if id:
            self.cursor.execute(
                """insert into t_company_building_ext(ID,text)  values (%s,%s)""",
                (id, item['text']))
            self.conn.commit()
            # return后 会把这个item继续传给后面的pipeline
            return item

我们可以写多个pipeline,分别做不同业务(清洗、存储)的事情。根据自己需求进行决定,一般我是直接在代码中就清洗完毕了,直接传到管道存储。
但是要注意的是,要是后面还有其他的pipeline用这个item进行处理操作的话,在process_item()方法中,必须将item返回,不然后面的pipeline就不会被调起来处理item了。或者抛出DropItem异常也会中断item的传递。

编写好pipeline之后还要记得在settings.py里面配置开启,这样pipeline才会真正被scrapy引擎知道,并开始工作。不然你是没有开启这个功能的,会产生数据未写入情况;

ITEM_PIPELINES = {
   'qichacha_xiangmu.pipelines.QichachaXiangmuPipeline': 300,
    # 'qichacha_xiangmu.pipelines2.QichachaXiangmuPipeline': 200,
}

上面需求中,我自己测试的。我要是只是存储库,不需要其他的操作的话,感觉返不返回 ’return item ‘一样,暂时还没有发现什么问题, 就是看到了很多都是返回这个item的,搞得对自己产生了怀疑,特意研究了下这个东西。

个人总结:
  1. 有需要再到后面的pipeline在对这个item进行处理的, 就需要返回;
  2. 没有其他操作的可以不返回,暂时没发现什么影响;
  3. 虽然这个管道官方说的是清洗管道,但是我喜欢清洗完后在进管道,根据个人习惯;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/488068.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号