用于解析无效HTML的Common Lisp包?

时间:2011-01-05 00:46:31

标签: common-lisp web-scraping quicklisp

作为一项学习练习,我在Common Lisp中编写了一个Web scraper。 (粗略)计划是:

  1. 使用Quicklisp管理依赖关系
  2. 使用Drakma加载页面
  3. 使用xmls
  4. 解析页面

    我只是遇到了一个棘手的问题:我正在抓取的网站并不总能产生有效的XHTML。这意味着步骤3(使用xmls解析页面)不起作用。而且我不愿意使用正则表达式作为this guy: - )

    那么,有人可以推荐一个Common Lisp包来解析无效的XHTML吗?我正在想象类似于.NET的HTML Agility Pack ......

3 个答案:

答案 0 :(得分:11)

“closure-html”项目(可在Quicklisp中获得)将从伪造的HTML中恢复并生成可以使用的内容。我使用closure-html和CXML来处理任意网页,它运行良好。 http://common-lisp.net/project/closure/closure-html/

答案 1 :(得分:3)

对于下一位访客:今天我们有丰满:https://shinmera.github.io/plump

  

Plump是HTML / XML文档的解析器,专注于对无效标记的宽容。它可以处理诸如无效属性,错误的结束标记顺序,未编码的实体,不存在的标记类型,自闭标记等等。它将文档解析为类表示,并提供一小组DOM函数来操作它。您可以自由地将其更改为解析为您自己的类。

他们我们有其他的库来查询文档,比如同一作者的lquery(jquery-like)或CLSS(简单的CSS选择器)。

我们现在还有一本关于Common Lisp Cookbook的小教程:https://lispcookbook.github.io/cl-cookbook/web-scraping.html

另见Common Lisp wiki:http://www.cliki.net/Web

答案 2 :(得分:1)

Duncan,到目前为止,我已成功在Ubuntu Linux和Windows(7& XP)下使用Clozure Common Lisp,所以如果你正在寻找可以在任何地方使用的实现,你可以试试这个。