V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2016-04-14 09:45:18 +08:00 · 3095 次点击
    这是一个创建于 3150 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在 parse 方法里面想要请求一个 json 数据该怎么写?
    用这样写出来的
    r = Request(link)的返回对象是 Request ,惊!
    又不想绕过 Scrapy 框架用 url,requests 库来请求。

    难道 scrapy 里面不能在 parse 里面请求另一个数据?
    11 条回复    2016-04-14 14:59:07 +08:00
    leavic
        1
    leavic  
       2016-04-14 09:57:02 +08:00   ❤️ 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
       2016-04-14 10:03:37 +08:00
    @leavic 嗯嗯,谢谢~因为我要提取的是推荐链接,所以我又写了个 parse 方法直接把推荐链接处理完了,总感觉这点 scrapy 有点绕圈子~
    Yc1992
        3
    Yc1992  
       2016-04-14 10:39:12 +08:00   ❤️ 1
    yield 一个 request , 设置不同的回调 parse
    guolingbing
        4
    guolingbing  
    OP
       2016-04-14 11:08:06 +08:00
    @Yc1992 嗯嗯,最后虽然这样解决了,但还是觉得有逻辑上的撕裂感
    Yc1992
        5
    Yc1992  
       2016-04-14 11:29:34 +08:00
    @guolingbing 一般都这样写啊,写多了就适应了,我一开始写爬虫 parse 也长的可怕,后来就拆分了。
    Zhongwei
        6
    Zhongwei  
       2016-04-14 12:33:34 +08:00
    就是不断地 yield, 传给下个 callback 继续处理。
    fengxiang
        7
    fengxiang  
       2016-04-14 13:24:30 +08:00 via Android
    搭车,有没有方法立刻暂停?等了一天都停不下来。
    Yc1992
        8
    Yc1992  
       2016-04-14 13:38:54 +08:00
    @fengxiang ctrl + c 只按一次可以停止并返回当前爬取的结果
    fengxiang
        9
    fengxiang  
       2016-04-14 14:51:59 +08:00 via Android
    @Yc1992 我用+c 不能马上停下来,有时候要等好几个小时。囧 rz
    Yc1992
        10
    Yc1992  
       2016-04-14 14:58:06 +08:00
    @fengxiang 说明 schedule 里面的 request 太多了, 使用 Debugging memory leaks with trackref 看一下,或者设置下爬取页面上限, scrapy 有接口
    guolingbing
        11
    guolingbing  
    OP
       2016-04-14 14:59:07 +08:00
    @fengxiang 按一次 ctrl+c 是 gracefully stop,再按一次就是强行停止
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3218 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:57 · PVG 20:57 · LAX 04:57 · JFK 07:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.