关于scrapy爬虫时,由spider文件将item传递到管道的方法注意事项

1问题描述

在自学scrapy框架爬虫时,发现某一网页数据中有若干个li或者ul标签,而这些标签中的文本或者属性就是自己需要的,无需渗透到相应的每一个标签内的链接中,再跳转到对应的页面进行爬取,根据自学内容发现,每次从spider使用return传递到pipeline中的数据形式是一个item,即字典形式,因此问题来了,对于上面的情况:
(1)希望能够使用一个列表的形式一起传递到管道中才方便,但是scrapy中注定不能传递一个列表嵌套任意个字典。
(2)如果对解析的页面ul或者li标签进行for遍历,却无法使用return方法,因为,每次这么使用只会将第一个li或者ul标签内容返回到管道中进行处理,即最终结果只能是在数据库中存储每个页面的第一个li或者ul标签内容。

2解决方法

对于上面的问题1,笔者认为可以在spider文件中直接将当前页面的全部li或者ul标签内容的item字典形式再存储一个字典中,即{a:{1:1,2:2…},b:{1:1,2:2…}…},
然后再经过return这个整合的item,将这个item传递到pipeline中,当然需要在对应的管道方法中对这个整合的item进行遍历一个一个再发给管道其他方法进行处理。
对于上面的问题2,可以使用yield来代替return,因为return方法的特性,直接终止当前的程序,因此导致了for循环的停止迭代,使用yield方法就能够很好的避免这个问题,笔者最终使用了这个方法来处理,话不多说,贴代码:
在这里插入图片描述
注意下面的yield info,这里就是直接遍历了当前页面的全部li标签后,使用了yield代替return方法实现了既不用渗透到每一个li标签的链接中,又能保有return到管道的效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值