2010-12-03 32 views
2

我正在寻找一种用于编写高效的网络爬虫的语言。事情我很看重:高效的网络爬虫的语言建议

  • 语言表达(不要让我只是通过静态类型箍)
  • 有用的库(CSS选择器基于HTML解析器将是很好)
  • 最小的内存占用
  • 可靠语言运行库&库

我试过node.js.理论上我喜欢节点。 Javascript非常富有表现力。你可以使用jQuery来解析html。节点的异步特性让我可以并行地抓取多个urls而不用处理线程。 V8解析速度很快且很快。

实际上,node并不适合我。我的过程不断崩溃。总线错误,事件管理器中的例外......等等

我已经做了一些Ruby开发,所以我不介意使用Ruby 1.9的协同程序(光纤?),只要我赢了'不会遇到与VM /库稳定性相似的问题。

其他建议?

回答

0

我很确定任何语言都有可以处理它的东西。你确定node.js没有崩溃,因为你的代码有问题吗?如果您对此感到满意,为什么不使用Ruby?

还有BeautifulSoup(Python),你可能会考虑如果你的主要障碍是HTML解析。

+0

我敢肯定,崩溃不是由我的代码中的问题引起的。我的代码更可能暴露了节点中的问题。特别是在总线错误的情况下。我喜欢Ruby,我只是没有在Ruby中编写异步代码的经验,所以我不知道它是否像在节点中一样“容易”。 – richcollins 2010-12-03 20:11:23

6

使用Node.js,并修复任何崩溃它。它已经运行在我的Ubuntu盒子上几个月没有任何问题。

对于图书馆,我建议使用YUI3而不是jQuery,如果你不相信我看YUIConf2010的this Talk,它很容易让你在几分钟内建立一个web爬行器/刮板,这是40分钟,但它是全部关于代码。

Dav Glass做了一件很棒的工作,展示了它是多么的容易,以及你需要多少代码,是的,谈话中不同版本的jsdom存在一些问题,但是谈话是在11月初给出的,这应该已经被修复了。

你可以在他的GitHub page上查看对话中的所有内容。
这是他的scraper,它从Digg获得当前新闻标题。

认真地说,让Node.js在你的系统上运行是非常值得的,因为最终你在服务器端获得了YUI3的所有精彩。

+0

我刚刚发现另一个问题。大约80%的时间,jsdom的jQuerify方法没有执行回调。看来,添加的脚本元素的onload回调不会被执行。这似乎很奇怪,我应该不得不模拟一个浏览器环境,并通过脚本加载来执行HTML抓取。 – richcollins 2010-12-03 20:10:39

+0

我同意。要知道你是否拥有正确的锤子,唯一的方法就是如果你确切知道你所拥有的不工作的原因。先解决这个问题。 – NotMe 2010-12-03 20:12:07

0

请使用您最熟悉的语言或您想要学习最多的语言。你可以用任何语言编写一个网络爬虫。

我亲自开发了Java,Ruby和Perl的抓取工具。所有这些语言都符合您的要求。 (是的,即使Java中的抓取程序也有合理的内存占用量。)其中,Java是我最喜欢的,因为它拥有最成熟的HTTP和HTML库。如果我发现自己写另一个,我想接下来尝试Python。

您将面临的第一个算法问题是有效识别您已访问过的页面的任务。这个URL索引可能会变得非常大,并且必须支持快速查找和插入。一个通用的数据库索引将在早期的爬虫原型中工作,但很快就会证明是瓶颈。

0

python和BeautifulSoup,易于学习和非常高效。