V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
moxiaowei
V2EX  ›  Python

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

  •  
  •   moxiaowei · Nov 18, 2018 · 3035 views
    This topic created in 2723 days ago, the information mentioned may be changed or developed.

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

        def parse(self, response):
    
               #计算商品价格......
    
               ......
               
               yield scrapy.Request(url, callback=self.parseNext)
    
       def parseNext(self, response):
    
               #扒页面的相关数据
    
               .......拿到具体价格
    
               这儿怎么把数据返回到 parse 方法中去,我好计算价格,总不能用 return 吧!
    
    12 replies    2018-11-23 13:36:19 +08:00
    ioven
        1
    ioven  
       Nov 18, 2018
    加入 meta
    yield scrapy.Request(url, callback=self.parseNext, meta={'price': '99'})

    parseNext 中
    price = response.price['index'] #99
    moxiaowei
        2
    moxiaowei  
    OP
       Nov 18, 2018
    @ioven 你这个是 parse 往 parseNext 中传值,我需要的是 parseNext 往 parse 中传值
    raptium
        3
    raptium  
       Nov 18, 2018 via iPhone
    抓取和业务逻辑为啥要耦合这么紧呢,都抓完存下来想怎么算都行啊
    kran
        4
    kran  
       Nov 18, 2018
    @ioven 原来有 meta 这东西, 可以不用闭包了.
    moxiaowei
        5
    moxiaowei  
    OP
       Nov 18, 2018
    @raptium 额 您这也是一条思路
    moxiaowei
        6
    moxiaowei  
    OP
       Nov 18, 2018
    @kran。。。。。。
    largecat
        7
    largecat  
       Nov 18, 2018 via Android
    def parse
    xxx
    xxxx
    run parse next
    calculate price
    return price

    def parsenext
    xxx
    xxxx
    .return xxxxx

    这样不行吗?
    largecat
        8
    largecat  
       Nov 18, 2018 via Android
    顺序执行,在 parse next 里计算价格啊,

    很朴实的逻辑
    moxiaowei
        9
    moxiaowei  
    OP
       Nov 19, 2018
    @largecat 兄弟 你可知道 scrapy 的执行流程,能这样 我早就写完了
    Leigg
        10
    Leigg  
       Nov 19, 2018 via iPhone
    meta 把数据带着
    Northxw
        11
    Northxw  
       Nov 19, 2018
    我不知道流程是啥! 我就想说,处理数据放在 Item,单定义一个 item, 得到某个属性的字段,到 Pipeline 再去算总价。如果不合心意,就先记录下来,一一对应, 最后另作处理。
    15399905591
        12
    15399905591  
       Nov 23, 2018
    你可以把 parse 的 response 通过 meta 传递到 parseNext 中进行处理。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2284 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 15:55 · PVG 23:55 · LAX 08:55 · JFK 11:55
    ♥ Do have faith in what you're doing.