html - 测试 HTML 表格是否用于布局与数据?

标签 html layout datatable web-scraping html-table

这更像是一个网络抓取问题。自动确定 <table> 是否为公认的方法是什么?用于布局还是用于数据 在您以前从未见过的一些 HTML 文档中?

我希望能够将任何 HTML 文件作为字符串传递到某个函数中,该函数在 HTML 页面中吐出所有数据表,但忽略纯粹用于布局的表。但是像 http://news.ycombinator.com/newcomments 这样的网站使用 HTML 表格进行布局,这使得它变得棘手。

此函数不应该针对任何特定网站的 DOM 结构进行定制,因此它应该适用于任何 HTML 字符串(或者具有尽可能高的成功率)。

人们多年来是否发现了可以区分布局和数据表的算法/检查?这应该是可能的,这只是写下所有变量和试错的问题——我想很多人已经在某个地方规划好了。

我不一定需要该功能(虽然那会很棒,但我想它需要大量微调)。只是在寻找一些尝试过的策略。

更新

这是一个好的开始(感谢@JaredFarrish):

最佳答案

用于布局的表格一般会

  • 行数很少,每行的单元格也很少。
  • 单元格中的内容长度极不一致
  • 单元格中有很多 HTML
  • 可以使用 colspan/rowspan
  • 位于 DOM 顶部附近
  • 不使用<th><thead>
  • 包含其他表格

用于数据的表格一般会

  • 有更多的行和每行更多的单元格
  • 单元格中的内容长度相当一致
  • 单元格内缺乏结构化 HTML(如 <div><p>;参见 <b><strong> 等不排除数据)
  • 可能不使用 colspan 并且很可能不使用 rowspan
  • 不包含其他表格

当您抓取表格时,根据这些标准对其进行评估和评分,对它们应用分数和权重,并使用最终分数来决定它是布局还是数据。

关于html - 测试 HTML 表格是否用于布局与数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11298113/

相关文章:

c# - DataTable 读取器加载速度很慢

javascript - 将 HTML 转换为 Sencha

html - 通过 HTTrack 从下载的 wbsite 中删除域 URL

javascript - 获取单个子元素的总宽度(然后减半)

css - 合并div?

java - 您是否需要膨胀 View 才能获取 onClick 方法的 id?

html - 背景颜色 - 适用于 IE6、IE7

html - 为什么在浏览器上单击后退和前进时密码字段变为空

javascript - Datatables 不会重新加载 json 数据

c# - DataTable 从多个列中选择不同的值