【问题标题】:Is Erlang the right choice for a webcrawler?Erlang 是网络爬虫的正确选择吗?
【发布时间】:2012-02-05 19:17:26
【问题描述】:

我正计划为一个 NLP 项目编写一个网络爬虫,它每次都会在特定的时间间隔内读取论坛的线程结构,并用新内容解析每个线程。通过正则表达式,提取新帖子的作者、日期和内容。然后将结果存储在数据库中。

用于爬虫的语言和平台必须符合以下条件:

  • 在多核和 CPU 上轻松扩展
  • 适合高 I/O 负载
  • 快速正则表达式匹配
  • 易于维护/操作开销很少

经过一些研究,我认为 Erlang 可能是一个合适的候选者,但我读到它在字符串处理(以及正则表达式匹配)方面不是很好。我对维护因素也没有任何经验。

对于上述场景,Erlang 是一种好的技术吗?如果没有,有什么好的选择?

【问题讨论】:

  • 这可能在programmers.stackexchange.com 上问得更好;它在这里属于“非建设性”,恕我直言
  • 您的标准与整体设计和架构的关系至少与语言的关系一样大。您可以使用 Erlang、Python、Java 等构建可扩展的网络爬虫。这还取决于您当前的编程语言经验和时间表。
  • 我真的很想在这个项目中使用 Erlang,因为它可能是我目前所读到的最合适的。我的问题是,如果糟糕的正则表达式匹配使其无法用于这个项目,那么在实践中运营费用(尤其是维护费用)会有多高。
  • Erlang 是(对我来说)爬虫的最佳选择。在尽可能多的虚拟机实例或物理机上生成和分发解析和爬取活动是可能的并且更容易

标签: erlang web-crawler


【解决方案1】:

我还在评估将 erlang 用作网络爬虫,目前它看起来不错。

现有很多有用的模块:HTML parserHTTP clientXPathregexcache

otherpeople对同一个用例感兴趣,大家可以借鉴一下。

但是,如果这只是一个一次性项目,我推荐 Python / Ruby / Perl,因为它更容易上手。

【讨论】:

  • 感谢您的回答和提供的链接。该项目旨在持续更长时间,学习 Erlang 的额外时间成本可以忽略不计(事实上,学习一门新语言会很有趣:))
  • 是的,学习如此不同的东西很有趣。我一直在学习本教程:learnyousomeerlang.com
【解决方案2】:

如果您熟悉并熟悉 erlang,那么如果我是您,我会坚持使用它,尽管我不熟悉 erlang。注意到了这一点,我会给你一些指示:

  1. 不要使用正则表达式解析 HTML,而是使用 XPATH
    HTML 虽然是结构化的,但在野外仍然很难解析,regular expressions are fairly slow and unreliable for parsing HTML.
  2. 确定您的crawler architecture 将是什么以及您的re-visit policy 是什么。
  3. 为您找到 best selection policy 并实施它。

网络爬虫是一个相当复杂的构建系统,您必须关注速度、性能、可扩展性和并发性。一些最著名的爬虫是用C++ and Java 编写的,但我没有听说过任何用erlang 编写的爬虫。

【讨论】:

  • 感谢您的建议。我的解析器必须专门为我要解析的论坛编写,而且我只需要整个 xhtml 树的一小部分,因此正则表达式可能比 Xpath 便宜得多。我认为您提出的问题使 Erlang 非常适合,具体取决于正则表达式匹配的可能瓶颈。
  • 您希望进行多少次爬取?每小时多少页?如果你没有做太多,那么正则表达式不会杀死你,但它仍然不如 xpath 可靠和慢,恕我直言。正则表达式也很难维护、调试和理解,所以我不惜一切代价尽量避免它。这只是我的偏好。如果你告诉我更多关于性能要求的信息,那么我还可以推荐一些其他的东西,比如一些关于 cralwer 架构的论文。
  • 你说正则表达式不太可靠是对的,但是它们通常比 XPath 快
【解决方案3】:

Erlang 很适合这个。它的正则表达式库代表(几乎所有)工作到PCRE,这应该足够快。但请避免使用字符串并使用二进制文件!它们都使用更少的内存并且更快地转换为 C 字符串。

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多