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
111qqz
V2EX  ›  Python

如何在前端用 api 同时调用多个 scrapy 编写的爬虫?

  •  
  •   111qqz · 2018-11-04 16:34:28 +08:00 · 1916 次点击
    这是一个创建于 2220 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学习爬虫,使用了 scrapy。 一个需要是,用户在浏览器输入关键词,然后返回爬取的 url 给用户。 调研发现了 scrapyd 和 scrapyrt 但是发现 scrapyd 没有办法返回自定义的 response. 于是又使用了 scrapyrt,但是发现无法同时处理多个用户的请求。 所以来求助各位 orz 总结一下,我的问题是:

    • 如果使用 scrapyd,除了返回 response 给前端的方式,还有什么办法可以将爬到的 url 给前端?以及,scrapyd 是否能够支持同时处理多个 request?
    • 如果使用 scrapyrt,如何支持同时处理多个 request ?
    • 如果不使用 scrapyd/scrapyrt,是否有一些 python web 的 framework 可以实现我这个需要。
    • 目前已经将爬虫部署在了 docker 中,用户不会很多,如果上述方案都比较麻烦难以实现,我启动多个 docker 来处理,这个方案是否现实?
    2 条回复    2018-11-08 14:19:44 +08:00
    locoz
        1
    locoz  
       2018-11-08 13:00:04 +08:00   ❤️ 1
    挽尊
    这个需求不太适合直接使用 scrapy 来做,可以用 web 框架+http 请求库,把爬虫做成接口的形式。比如使用 flask+requests,简单粗暴就能实现;或者是用 tornado 这种自带 server 和 client 的,又不需要特殊处理性能问题、又能在不依赖其他 http 请求库的情况下发出 http 请求。
    部署方面多容器做负载均衡是可以的,但是如果是在同一台机器下启动多个的话其实意义不大。
    111qqz
        2
    111qqz  
    OP
       2018-11-08 14:19:44 +08:00
    @locoz 感谢回复. 确实发现直接使用 scrapy 不太合适了. 不过当时需求比较紧急,就暂时使用了启动多个 docker 实例来同时处理请求的解决办法,前端用循环队列每次发 request 到一个不同的端口.可能是由于需要同时用的人不会很多,所以效果还挺好的.不过这肯定不是长久之计,现在已经按照你的思路,使用了 django + scrapyd,做成了接口的形式.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1134 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:57 · PVG 06:57 · LAX 14:57 · JFK 17:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.