首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >爬虫-程序设计语言选择

爬虫-程序设计语言选择
EN

Software Engineering用户
提问于 2015-05-01 11:41:58
回答 1查看 1.6K关注 0票数 -2

我目前正在开发一个网络爬虫。第一个版本是用Node.js开发的,运行得很好。

我在Node.js中遇到的问题没有什么特别的顺序:

  • 慢速URL和查询字符串解析库
  • 由于C++绑定调用开销而导致的HTTP数据包解析速度慢
  • 由于同步调用getaddrinfo而不是异步call库,DNS解析速度缓慢
  • 在RegExps中缺乏良好的Unicode支持

这在很大程度上是因为它还很年轻,而且它是一种通用语言,有一个小型的核心开发团队。

由于Node.js的异步特性和我不得不添加的一些猴子补丁,我目前的概念证明运行得很好。

现在我开始思考在概念证明之后会发生什么。

编程语言的问题是我还无法回答的问题。

我要寻找的基本品质是:

  • I/O和并发管理
  • HTTP消息、HTML、JSON ...etc的快速字符串解析功能。
  • 绑定到某种队列/持久化层

我想到了C,Erlang,Rust,Go和D。

我知道这通常不是在Stack上被接受的问题,但我不知道我还能从哪里得到答案。

更新:更多信息:

  • 我们目前使用8核心,3.2GHz的机器。
  • 持久层是通过运行PostgreSQL数据库来确保的。
  • 重点是抓取各种新闻网站和博客以及RSS提要。
  • 目前,我们通过Apache Kafka将内容转发到处理管道中。
EN

回答 1

Software Engineering用户

发布于 2015-05-01 12:18:08

为了教育目的(TripAdvisor刮板),我用Python开发了一个爬虫。

它建立在Scrapy抓取web的基础上,我选择Python,因为它对自然语言处理技术很好,您有很多工具包和资源(NLTK)。Python处理大量数据的速度并不快,您必须处理内存管理以保持速度。Scrapy无法在网页上运行JavaScript,所以如果您在运行时通过JS进行了一些更改,您将无法检索它。

现在,我正在编写一个完整的异步系统,能够扩展和自我修复,用于从各种来源抓取数据。

我使用Scala进行函数编程(没有副作用,很容易达到高度并行性)+ Akka (基于角色的模型,易于隔离和扩展整个系统。它为管理者提供战略)。Akka范式是受Erlang演员模型系统的强烈启发。为了操作DOM,我使用了JSOUP,它是一个处理HTML的完整库,它能够执行JavaScript。因此,模拟真实的浏览器交互是很好的。整个堆栈基于JVM。

与第一个堆栈相比,这个新堆栈的速度非常快,而且它是反应性和弹性

我建议使用第二种解决方案,或者如果您想尝试,我认为Erlang足够好构建一个快速的爬行器,并且容易实现并行性。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/280680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档