【问题标题】:HtmlCleaner failing on some xpaths generated by XPatherHtmlCleaner 在 XPather 生成的某些 xpath 上失败
【发布时间】:2011-05-28 21:27:50
【问题描述】:

我正在使用 HtmlCleaner2.1 库来评估由 XPather 插件生成的 xpath 与 html 的对比,以从中抓取内容。但有时,HtmlCleaner 无法评估 xpath。

例如 http://www.megaoutdoors.co.uk/norwegen-army-shirt-zipped-roll-top-collar-278-p.asp

对于产品标题,XPather 给出的 xpath 为 //body/div[11]/div[6]/div[2]/form/div[1]/h1 但是当我使用 HtmlCleaner 评估它时,这会失败。

我们怎样才能克服这个问题。 htmlcleaner清理时页面结构会改变吗?

谢谢
日腾德拉

【问题讨论】:

  • @Jitendra:对于声称 XHTML 验证不是格式良好的 XML 的文档,通常不是一个好的设计选择。
  • 以什么方式失败? (例如错误消息、获取错误数据、没有获取数据……)
  • @Alejandro,这些网站不是我们的,但我们有权抓取它们。所以无论如何我们都必须刮掉它们。
  • @LarsH,从某种意义上说,在评估上述 xpath 时,它给出了 0 个节点。
  • @Jitendra:还要注意浏览器构建的 DOM 可能与其他解析器构建的 DOM 不同(匿名元素、强制 TBODY、相邻文本节点等)

标签: java html xpath htmlcleaner


【解决方案1】:

页面结构会改变吗 htmlcleaner 清理它?

根据http://htmlcleaner.sourceforge.net/ 上的介绍示例,HTMLCleaner当然可以在清理时改变页面结构。在该示例中,它添加了 html 和 body 元素,并将 h1 元素移出表格。

为什么不在页面上运行 HTMLCleaner 并查看它的输出?然后您就可以判断结构是否发生了变化以及如何发生变化。

有什么办法可以避免或在 换句话说,保持 DOM 由 HtmlCleaner 尽可能接近 浏览器构建的DOM。

您可以通过指定与default one 不同的修改后的标签信息集来做到这一点。这显然是配置 DOM 的“更正”的原因。 (如果您使用的是命令行界面,请参阅here 了解如何使用它。)

或者如果你能推荐一些其他的 html解析器,其DOM非常接近 通过浏览器到 DOM,以便 xpath XPather 插件生成会失败 很少见。

我会尝试HTML Tidy,看看它对 DOM 做了什么。这是一个广泛使用且成熟的整理抓取 HTML 的程序。

【讨论】:

  • 抱歉,问题的框架不太好。我知道页面结构发生了变化。有没有办法避免它,或者换句话说,让 HtmlCleaner 生成的 DOM 尽可能接近浏览器构建的 DOM。
  • 或者如果你能推荐一些其他的html解析器,它的DOM非常接近浏览器的DOM,这样XPather插件生成的xpath很少会失败。
  • @Jitendra,我更新了我的答案以回应那些 cmets。
  • thnx Larsh,我肯定会尝试 JTidy java 版本的 Html Tidy。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多