在Erlang中编写HTML解析器

时间:2010-06-24 08:03:23

标签: erlang html-parsing

我是Erlang的新手,作为学习练习的一部分,我想在Erlang中编写一个HTML解析器。

我想从网页中提取某些值,可能使用模式来描述我想要提取的数据。

任何人都可以向我提供一些关于如何在Erlang中解决这个问题的高级建议吗?

我认为我需要将文档转换为一堆标记,可能使用有限状态机来跟踪我在嵌套方面的位置以及我在元素中的位置。

2 个答案:

答案 0 :(得分:6)

我建议你看看Mochiweb中包含的那个:

http://github.com/mochi/mochiweb/blob/master/src/mochiweb_html.erl

parse/1函数可能是您感兴趣的入口点。

答案 1 :(得分:4)

如果您打算完成它,这是一项很重要的工作。你最好使用Roberto建议的那个,但如果你决定自己编写一个项目来熟悉Erlang,这里有一些建议......

首先应确定是要手动编写解析器代码还是使用leex and yecc从语法生成解析器。如果您想学习如何编写惯用的Erlang,手动编码可能是一种更好的学习体验。编写解析器是向Erlang介绍自己的绝佳方式;函数式编程语言擅长实现解析器。

其次,您应该决定是否要生成类似DOM的结构,或者在Erlang中执行类似SAX的回调模型,称为behaviour。如果您执行后者,则可以简单地实现行为以创建DOM。

如果你看一下行为,你可能还想看看parametrized modules。这是一个可以补充行为的实验性功能,允许将不可变状态存储在“模块实例”中。目前尚不清楚社区是否支持这一新功能。 (对某些人来说,它看起来太OO了。)

另一个优秀的资源是xmerl代码。仔细确定它如何确定字符编码并相应地解析。 HTML(varioust标准)的工作略有不同,但在阅读文件时考虑正确的字符编码非常重要。

同样来自xmerl,您可以看到该库如何使用Erlang元组构造DOM。你可能想做类似的事情。