作为一项学习练习,我在Common Lisp中编写了一个Web scraper。 (粗略)计划是:
我只是遇到了一个棘手的问题:我正在抓取的网站并不总能产生有效的XHTML。这意味着步骤3(使用xmls解析页面)不起作用。而且我不愿意使用正则表达式作为this guy: - )
那么,有人可以推荐一个Common Lisp包来解析无效的XHTML吗?我正在想象类似于.NET的HTML Agility Pack ......
答案 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,所以如果你正在寻找可以在任何地方使用的实现,你可以试试这个。