我目前正在开发一个网络爬虫。第一个版本是用Node.js开发的,运行得很好。
我在Node.js中遇到的问题没有什么特别的顺序:
getaddrinfo而不是异步call库,DNS解析速度缓慢这在很大程度上是因为它还很年轻,而且它是一种通用语言,有一个小型的核心开发团队。
由于Node.js的异步特性和我不得不添加的一些猴子补丁,我目前的概念证明运行得很好。
现在我开始思考在概念证明之后会发生什么。
编程语言的问题是我还无法回答的问题。
我要寻找的基本品质是:
我想到了C,Erlang,Rust,Go和D。
我知道这通常不是在Stack上被接受的问题,但我不知道我还能从哪里得到答案。
更新:更多信息:
发布于 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足够好构建一个快速的爬行器,并且容易实现并行性。
https://softwareengineering.stackexchange.com/questions/280680
复制相似问题