Советы по замене тегов img на текст в Ruby? - PullRequest
0 голосов
/ 27 марта 2012

Я пытаюсь выяснить, как сохранить html-таблицу статистики накопителей в базе данных, но разработчики немного умен и начали использовать gif-ы для представления статистики pass / fail / health

Вот фрагмент того, что у меня есть:

<tr class="status">
<td class="status"><img border="0" src="/tick_green.gif"></td>
<td class="status">8</td>
<td class="status">Ready</td>
<td class="status"><a href="/cgi-bin/status_drive?cont=0&amp;dylan=0&amp;drive=8"><img border="0" src="/bar10.gif"></a></td>
<td class="status">SEAGATE ST3146807FC</td>
<td class="status">10000 RPM</td>
<td class="status">3HY61AG9</td>
<td class="status">XR12</td>
<td class="status">286749488</td>
<td class="status"> 28.0&#176;C</td>
<td class="status" style="background-color: #00fa00">&#160;
</td>

**

А вот несколько рубинов, которые я написал до сих пор, чтобы убрать теги:

table = page.parser.xpath('//table/caption[contains(.,"Drive")]/..')
table.xpath('//table//tr').each do |row|
  row.xpath('td').each do |cell|
    puts   cell.to_html.gsub(/<a[^>]+>/,'').gsub(/<td[^>]+>/,'').gsub(/<\/td[^>]*>/,'').gsub(/<\/a[^>]*>/,'')
    #puts cell.text
  end
end

Теперь я могу получить полурациональный вывод

<img border="0" src="/tick_green.gif">
15
Ready
<img border="0" src="/bar10.gif">
SEAGATE ST3146807FC
10000 RPM
3HY61ASW
XR12
286749488
 29.0&#176;C
&#160;

Но я хочу заменить пару других элементов ячейки другими битами Например, tick_green также может быть «/cross_red.gif» или «/caution.gif», который я хочу заменить обычным текстом, аналогично img bar10.gif, который я хочу заменить просто текстом «10» Лучше ли придумать целую кучу значений для всех моих особых случаев?

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Я бы сделал 'gsub'iing.

Например:

example = <<-STRING
<img border="0" src="/tick_green.gif">
15
Ready
<img border="0" src="/bar10.gif">
SEAGATE ST3146807FC
10000 RPM
3HY61ASW
XR12
286749488
29.0&#176;C
&#160;
STRING

replace = Hash.new("#unknown")
replace['tick_green.gif'] = "[OK]"
replace['bar10.gif'] = "[10]"

regex = /<img [^>]* src="\/(.*)">/
result = example.gsub(regex) { replace[$1] } 

Каким-то образом я бы хотел заменить $ 1 на именованную обратную ссылку, но не знаюкак еще.

http://ruby -doc.org / core-1.9.3 / String.html # method-i-gsub

редактировать: результат сверху

[OK]
15
Ready
[10]
SEAGATE ST3146807FC
10000 RPM
3HY61ASW
XR12
286749488
 29.0&#176;C
&#160;
0 голосов
/ 27 марта 2012

Оператор case немного уберет, но:

row.css('td').each do |td|
    img = td.at('img')
    puts case
        when img && img[:src][/bar(\d+)\.gif/] then $1
        when img && img[:src][/tick_green/] then 'ok'
        else td.text.strip
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...