屏幕抓取记录未正确导入

时间:2012-02-09 19:37:08

标签: ruby-on-rails html-table screen-scraping

我的屏幕抓取脚本(在Rails 3.1应用程序中)中有以下代码段:

# Add each row to a new call record
page = agent.page.search("table tbody tr").each do |row|
  next if (!row.at('td'))
  time, source, destination, duration = row.search('td').map{ |td| td.text.strip }
  call = Call.find_or_create_by_time(time)
  call.update_attributes({:time => time, :source => source, :destination => destination, :duration => duration})
end

这是有效的,但我认为在远程站点上做了一些更改(他们目前没有API)。

新的HTML代码如下:

<tr class='o'>
<td class='checkbox'><input class="bulk-check" id="recordings_13877" name="recordings[13877]" type="checkbox" value="1" /></td>
<td>09 Feb 11:37</td>
<td>Danny McClelland</td>
<td>01772123573</td>
<td>00:00:28</td>
<td></td>
<td class='opt recording'>
<a href="/unit/27/logs/recording/13877"><img alt="" class="icon recordings" src="/images/icons/recordings.png?1313703677" title="" /></a>
<a href="/unit/27/logs/recording/13877" data-confirm="Are you sure you wish to delete this recording?" data-method="delete" rel="nofollow"><img alt="" class="icon recording-remove" src="/images/icons/recording-remove.png?1317304112" title="" /></a>
</td>
</tr>

由于可疑的更改,数据正在错误的字段中导入或完全错过。目前,我想要/需要的数据的唯一部分是:

<td>09 Feb 11:37</td>
<td>Danny McClelland</td>
<td>01772123573</td>
<td>00:00:28</td>

可悲的是,这些行虽然没有任何唯一标识符。

任何帮助/建议表示赞赏! 有没有更好的方法来编写更“未来”证明的脚本?

1 个答案:

答案 0 :(得分:1)

第一个td现在是一个复选框。 所以只需将其更改为:

time, source, destination, duration = row.search('td')[1..5].map{ |td| td.text.strip }

真的没有办法让未来证明刮刀(除非你是通灵者)