scrapy 在 parse 函数中,如何拿到另一个 Request 的结果

2018-11-18 20:03:20 +08:00
 moxiaowei

现在需求是这样的,我有一个 parse 去解析页面,我要算一个商品的总价格,但是,商品的某一个属性的价格呢,我不能确定,需要依靠另一个 Request 去跑一个页面。关键就是在我跑另一个 request,怎么把数据告诉 parse 方法。别说什么 callback,这个我当然知道!肯定不能用 callback 去解决吧!下面上代码:

    def parse(self, response):

           #计算商品价格......

           ......
           
           yield scrapy.Request(url, callback=self.parseNext)

   def parseNext(self, response):

           #扒页面的相关数据

           .......拿到具体价格

           这儿怎么把数据返回到 parse 方法中去,我好计算价格,总不能用 return 吧!
2544 次点击
所在节点    Python
12 条回复
ioven
2018-11-18 20:17:27 +08:00
加入 meta
yield scrapy.Request(url, callback=self.parseNext, meta={'price': '99'})

parseNext 中
price = response.price['index'] #99
moxiaowei
2018-11-18 20:19:55 +08:00
@ioven 你这个是 parse 往 parseNext 中传值,我需要的是 parseNext 往 parse 中传值
raptium
2018-11-18 20:26:13 +08:00
抓取和业务逻辑为啥要耦合这么紧呢,都抓完存下来想怎么算都行啊
kran
2018-11-18 20:38:21 +08:00
@ioven 原来有 meta 这东西, 可以不用闭包了.
moxiaowei
2018-11-18 20:38:59 +08:00
@raptium 额 您这也是一条思路
moxiaowei
2018-11-18 20:39:13 +08:00
@kran。。。。。。
largecat
2018-11-18 21:20:44 +08:00
def parse
xxx
xxxx
run parse next
calculate price
return price

def parsenext
xxx
xxxx
.return xxxxx

这样不行吗?
largecat
2018-11-18 21:21:39 +08:00
顺序执行,在 parse next 里计算价格啊,

很朴实的逻辑
moxiaowei
2018-11-19 08:46:34 +08:00
@largecat 兄弟 你可知道 scrapy 的执行流程,能这样 我早就写完了
Leigg
2018-11-19 09:18:02 +08:00
meta 把数据带着
Northxw
2018-11-19 09:46:03 +08:00
我不知道流程是啥! 我就想说,处理数据放在 Item,单定义一个 item, 得到某个属性的字段,到 Pipeline 再去算总价。如果不合心意,就先记录下来,一一对应, 最后另作处理。
15399905591
2018-11-23 13:36:19 +08:00
你可以把 parse 的 response 通过 meta 传递到 parseNext 中进行处理。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/509018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX