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
guolingbing
V2EX  ›  Python

求助 Scrapy 的问题

  •  
  •   guolingbing · Apr 14, 2016 · 3500 views
    This topic created in 3671 days ago, the information mentioned may be changed or developed.
    我在 parse 方法里面想要请求一个 json 数据该怎么写?
    用这样写出来的
    r = Request(link)的返回对象是 Request ,惊!
    又不想绕过 Scrapy 框架用 url,requests 库来请求。

    难道 scrapy 里面不能在 parse 里面请求另一个数据?
    11 replies    2016-04-14 14:59:07 +08:00
    leavic
        1
    leavic  
       Apr 14, 2016   ❤️ 1
    下面是我抓 javbus 时,通过 request 抓磁链部分的 ajax 请求的做法:
    ===============
    https://gist.github.com/lifetyper/8c7858345f7d788a0bd76a2af470b46d
    ==============
    简单来说,建立一个 scrapy 的 request ,设置好 callback ,通过 request.meta['item']=item 的方法把已经抓到内容的 item 传递给 callback ,然后在 callback 里继续处理要额外 request 的内容,并填充数据到 item 。
    最后 yield 给 pipeline 。
    guolingbing
        2
    guolingbing  
    OP
       Apr 14, 2016
    @leavic 嗯嗯,谢谢~因为我要提取的是推荐链接,所以我又写了个 parse 方法直接把推荐链接处理完了,总感觉这点 scrapy 有点绕圈子~
    bytenoob
        3
    bytenoob  
       Apr 14, 2016   ❤️ 1
    yield 一个 request , 设置不同的回调 parse
    guolingbing
        4
    guolingbing  
    OP
       Apr 14, 2016
    @Yc1992 嗯嗯,最后虽然这样解决了,但还是觉得有逻辑上的撕裂感
    bytenoob
        5
    bytenoob  
       Apr 14, 2016
    @guolingbing 一般都这样写啊,写多了就适应了,我一开始写爬虫 parse 也长的可怕,后来就拆分了。
    Zhongwei
        6
    Zhongwei  
       Apr 14, 2016
    就是不断地 yield, 传给下个 callback 继续处理。
    fengxiang
        7
    fengxiang  
       Apr 14, 2016 via Android
    搭车,有没有方法立刻暂停?等了一天都停不下来。
    bytenoob
        8
    bytenoob  
       Apr 14, 2016
    @fengxiang ctrl + c 只按一次可以停止并返回当前爬取的结果
    fengxiang
        9
    fengxiang  
       Apr 14, 2016 via Android
    @Yc1992 我用+c 不能马上停下来,有时候要等好几个小时。囧 rz
    bytenoob
        10
    bytenoob  
       Apr 14, 2016
    @fengxiang 说明 schedule 里面的 request 太多了, 使用 Debugging memory leaks with trackref 看一下,或者设置下爬取页面上限, scrapy 有接口
    guolingbing
        11
    guolingbing  
    OP
       Apr 14, 2016
    @fengxiang 按一次 ctrl+c 是 gracefully stop,再按一次就是强行停止
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2285 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 15:55 · PVG 23:55 · LAX 08:55 · JFK 11:55
    ♥ Do have faith in what you're doing.