用Erlang编写HTML解析器

用Erlang编写HTML解析器,erlang,html-parsing,Erlang,Html Parsing,我对Erlang非常陌生,作为学习练习的一部分,我想用Erlang编写一个HTML解析器 我想从网页中提取某些值,也许可以使用一种模式来描述我想要提取的数据 有谁能给我一些关于如何在Erlang解决这个问题的高级建议吗 我认为我需要将文档转换成一堆令牌,可能需要使用有限状态机来跟踪我在嵌套方面的位置以及我在元素中的位置。我建议您查看Mochiweb中包含的一个: parse/1函数可能是您感兴趣的切入点。如果您打算完成这项工作,这将是一项艰巨的工作。您最好使用Roberto建议的方法,但是如果

我对Erlang非常陌生,作为学习练习的一部分,我想用Erlang编写一个HTML解析器

我想从网页中提取某些值,也许可以使用一种模式来描述我想要提取的数据

有谁能给我一些关于如何在Erlang解决这个问题的高级建议吗


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

我建议您查看Mochiweb中包含的一个:


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

如果您打算完成这项工作,这将是一项艰巨的工作。您最好使用Roberto建议的方法,但是如果您决定将自己的作为一个项目来编写,以熟悉Erlang,这里有一些建议

您应该首先决定是手工编写解析器代码,还是使用语法生成解析器。如果您想学习如何编写惯用的Erlang,手工编码可能是一种更好的学习体验。编写解析器是向您介绍Erlang的一种很好的方式;函数式编程语言擅长实现解析器

其次,您应该决定是要生成一个类似DOM的结构,还是要生成一个类似SAX的回调模型,称为in-Erlang。如果执行后一种操作,则可以简单地实现创建DOM的行为

如果你观察行为,你可能还想调查。这是一个实验特性,可以补充行为,允许在“模块实例”中存储不变状态。目前还不知道社区是否支持这一新功能。(对一些人来说,这看起来太糟糕了)

另一个优秀的资源是代码。请仔细了解它如何确定字符编码并进行相应的解析。HTML(各种标准)的工作原理略有不同,但在读取文件时考虑正确的字符编码是很重要的


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

也许我是仓促地建议您研究参数化模块。有很好的理由可以避免它()。谢谢你的回答,这是一个学习练习,而不是很多人都会用到的东西。XMerl是一个很好的资源。