【问题标题】:Can Scrapy be replaced by pyspider?Scrapy可以用pyspider代替吗?
【发布时间】:2015-01-30 08:02:42
【问题描述】:

我一直在广泛使用Scrapy web-scraping 框架,但是,最近我发现还有另一个名为pyspider 的框架/系统,根据它的 github 页面,它是新鲜的,积极开发的并且很受欢迎。

pyspider 的主页列出了几项开箱即用的支持:

  • 具有脚本编辑器、任务监视器、项目管理器和结果查看器的强大 WebUI

  • 支持 Javascript 页面!

  • 任务优先级、重试、定期和 在索引页面中按年龄或标记重新抓取(如更新时间)

  • 分布式架构

这些是Scrapy 本身不提供的东西,但是,在portia(用于Web UI)、scrapyjs(用于js 页面)和scrapyd(部署和通过 API 分发)。

真的pyspider 就可以代替所有这些工具吗?换句话说,pyspider 是 Scrapy 的直接替代品吗?如果没有,那么它涵盖了哪些用例?

我希望我没有越过“过于宽泛”或“基于意见”的界限。

【问题讨论】:

  • 这非常接近基于意见的路线。我不确定我是否会考虑它。
  • @Amber 谢谢,我很担心。试图添加细节。 (至少比Is it worth learning Scrapy?更详细、更具体)。
  • @Amber 我想我已经得到了最好的答案。 Binux 是 pyspider 项目的发明者和维护者。希望这个帖子能成为那些对scrapy和pyspider之间的区别有疑问的人的起点。
  • @alecxe 鉴于您在 Scrapy 方面拥有更丰富的经验,希望能得到一份关于您在 pyspider 方面的经验的报告。
  • @chishaku 这是个好主意,我想有一天我会用我自己的观察和感受来提供答案。谢谢!

标签: python web-scraping scrapy web-crawler pyspider


【解决方案1】:

pyspider 和 Scrapy 具有相同的目的,即网络抓取,但对这样做的看法不同。

  • 蜘蛛永远不会停止,直到 WWW 死了。 (信息在变化,数据在网站更新,spider应该有能力和责任抓取最新数据。这就是为什么pyspider有URL数据库,强大的调度器,@everyage等。)

  • pyspider 不仅仅是一个框架,更是一个服务。 (组件在隔离进程中运行,lite - all 版本也作为服务运行,您不需要 Python 环境而是浏览器,有关 fetch 或 schedule 的所有内容都由脚本通过 API 而非启动参数或全局配置控制,资源/项目由pyspider等管理...)

  • pyspider 是一个蜘蛛系统。 (可以替换任何组件,甚至可以用 C/C++/Java 或任何语言开发,以获得更好的性能或更大的容量)

  • on_startstart_url
  • token bucket交通管制与download_delay
  • return jsonclass Item
  • 消息队列与Pipeline
  • 内置url数据库vsset
  • 持久性与内存中
  • PyQuery + 你喜欢的任何第三个包 vs 内置 CSS/Xpath 支持

事实上,我并没有过多地参考 Scrapy。 pyspider 和 Scrapy 真的不一样。

但是,为什么不try it yourself? pyspider 也是fast,有易于使用的API,无需安装即可试用。

【讨论】:

  • @Binux:我想看看一个新的网页抓取工具,很棒的工作。但是,为什么不是 python3? Python 2 已成为过去,这就是我放弃 Scrapy 的原因
  • @Jedi 我更熟悉 python 2.7,pyspider 是在 2 年前用 python 2.7 首次制作的。我想从我更熟悉的地方开始,专注于架构。我会在 v0.5.0 之前支持 python 3
  • 看来您是您推荐的工具的作者。没关系,但是您可以在添加时添加完整的披露说明吗?
【解决方案2】:

由于我同时使用scrapy和pyspider,我想建议如下:

如果网站真的很小/很简单,请先尝试 pyspider,因为它几乎拥有您需要的一切

  • 使用 webui 设置项目
  • 试用在线代码编辑器,立即查看解析结果
  • 在浏览器中轻松查看结果
  • 运行/暂停项目
  • 设置过期日期,以便重新处理网址

但是,如果您尝试过 pyspider 并发现它不能满足您的需求,那么是时候使用 scrapy 了。 - 迁移 on_start 到 start_request - 迁移 index_page 来解析 - 将 detail_age 迁移到 detail_age - 将 self.crawl 更改为 response.follow

那么你就差不多完成了。 现在您可以使用 scrapy 的高级功能,如中间件、项目、管道等。

【讨论】:

    猜你喜欢
    • 2019-06-03
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2011-06-10
    相关资源
    最近更新 更多