【发布时间】:2013-03-08 16:46:15
【问题描述】:
所以,我有一个多行多列的表格。
<table>
<tr>
<th>Employee Name</th>
<th>Reg Hours</th>
<th>OT Hours</th>
</tr>
<tr>
<td>Employee 1</td>
<td>10</td>
<td>20</td>
</tr>
<tr>
<td>Employee 2</td>
<td>5</td>
<td>10</td>
</tr>
</table>
还有一张桌子:
<table>
<tr>
<th>Employee Name</th>
<th>Revenue</th>
</tr>
<td>Employee 2</td>
<td>$10</td>
</tr>
<tr>
<td>Employee 1</td>
<td>$50</td>
</tr>
</table>
请注意,表之间的员工顺序可能是随机的。
如何使用 nokogiri 创建一个 json 文件,其中包含每个员工作为一个对象,以及他们的总工时和收入?
目前,我只能通过一些 xpath 获取单个表格单元格。例如:
puts page.xpath(".//*[@id='UC255_tblSummary']/tbody/tr[2]/td[1]/text()").inner_text
编辑:
使用页面对象 gem 和来自@Dave_McNulla 的链接,我尝试了这段代码只是为了看看我得到了什么:
class MyPage
include PageObject
table(:report, :id => 'UC255_tblSummary')
def get_some_information
report_element[1][2].text
end
end
puts get_some_information
但是没有返回任何东西。
数据:https://gist.github.com/anonymous/d8cc0524160d7d03d37b
有一个小时表的副本。第一个很好。需要的另一个表是附件收入表。 (我还需要激活表,但我会尝试从合并小时和附件收入表的代码中合并它。
【问题讨论】:
-
你能修改 HTML 以包含表格元素的类吗?具体来说,
标签可以有一个“employee”类,每个 标签可以有一个类(例如“name”、“revenue”等)。这将帮助您匹配员工姓名,然后在另一个 HTML 文档中找到它,然后从两者构建 JSON,或者在构建对象之前将它们合并在一起。 HTML 不是我的。获取 xpath 节点不是问题……我想我更倾向于 Ruby 部分。我不确定如何迭代行并合并两个表之间的数据。您是否有理由要使用 Nokogiri 而不是使用 Watir?Cheezy/Jeff Morgan 在页面对象中有一种方法可以从表格中获取信息:cheezyworld.com/2012/05/23/a-better-shovel@JustinKo,Watir 可以做我需要做的事情吗?我在文档中找不到任何内容。
标签: ruby screen-scraping nokogiri watir page-object-gem