【问题标题】:Clean and convert HTML to XML for BaseX为 BaseX 清理 HTML 并将其转换为 XML
【发布时间】:2015-08-30 06:51:32
【问题描述】:

我想在 HTML 源上使用 BaseX 运行一些 XQuery 命令,这些命令可能充满了必须删除的<script><style> 节点以及必须具有的未闭合标签(<br><img>)一双。 (例如this page的脏源)

"Converting HTML to XML" 建议使用 Tidy,但它没有 GUI,而且在我的源代码上似乎无法正常工作(它什么也不输出),我怀疑它是否会删除脚本和其他不必要的标签。顺便说一句,它很旧了。

由于我没有找到任何满足我需求的问题,所以我再次询问。因为和编码和查询的工具非常接近,所以在这里问。

【问题讨论】:

  • 接近投票者:我看不到这个问题如何搜索产品推荐,也不需要任何代码来重现问题。

标签: html xml converter xquery basex


【解决方案1】:

BaseX has integration for TagSoup,它将 HTML 转换为格式良好的 XHTML。

BaseX 的大多数发行版已经捆绑了 TagSoup,如果您从 Linux 存储库安装 BaseX,您可能需要手动添加它(例如,在 Debian 和 Ubuntu 上,它被称为 libtagsoup-java)。上面链接的文档中提供了不同安装选项的更多详细信息。

之后,使用命令将 TagSoup 解析器设置为默认值

SET PARSER html

或在 XQuery 序言中使用

declare option db:parser "html";

然后,只需获取您想要的文档。您链接的亚马逊网站的示例:

declare option db:parser "html";
doc('http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=camera')

这应该可以,但不行。我正在询问主要开发人员的原因(似乎是因为某些 HTTP 重定向),并且会在问题解决后更新答案(或者我理解为什么这不起作用)。在那之前的解决方法是将文档作为文本获取并将其解析为 HTML:

html:parse(fetch:text('http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=camera')

【讨论】:

  • 我认为问题是由于亚马逊阻止了获取: $ curl -I 'amazon.com/s/…' -- 返回 --> HTTP/1.1 405 Method Not Allowed ;也许它会与正确的用户代理一起工作
  • 我使用curl -L 获得了有效结果。他们可能会阻止您进行过多的查询。无论如何,也许您应该考虑使用他们的 API——无论如何,这应该始终是站点抓取的首选。
  • 非常感谢!我将在 Windows 中为 baseX 安装它
猜你喜欢
  • 2020-10-20
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多