2013-06-15 9 views
-1

Я изучаю Nokogiri в механизированном самолете, и мне трудно понять, какой правильный селектор используется для построения массива из таблицы html. Вот HTML таблица Мне нужно извлечь данные из:Извлечение данных из таблицы HTML

<table id="propertysearchresults"> 
    <thead>…</thead> 
    <tbody> 
    <tr class="prototype_r"> 
     <td class="transparent">…</td> 
     <td>...</td> 
     <td> ITEM ONE </td> 
     <td> ITEM TWO </td> 
     <td class="location">…</td> 
     <td> ITEM THREE </td> 
     <td class="text_right">ITEM FOUR</td> 
    </tr> 
    <tr class="prototype_r"> 
     <td class="transparent">…</td> 
     <td>...</td> 
     <td> ITEM ONE </td> 
     <td> ITEM TWO </td> 
     <td class="location">…</td> 
     <td> ITEM THREE </td> 
     <td class="text_right">ITEM FOUR</td> 
    </tr> 
    </tbody> 
</table> 

Я хотел бы создать массив для элементов одного через четыре для каждой строки данных. Если бы кто-то мог помочь с синтаксисом, я был бы признателен. Благодаря!!!

ответ

1

Предполагая, что элементы один/два/три/четыре всегда в одних и тех же Td индексов, вы могли бы сделать это следующим образом:

# Writing standalone; use Mechanize to fetch if you like 
require 'nokogiri' 
doc = Nokogiri.HTML(page_html) 

data = doc.css('#propertysearchresults > tbody > tr').map do |row| 
    row.elements.to_a.values_at(2,3,5,6).map(&:text) 
end 

p data 
#=> [ 
#=> [" ITEM ONE ", " ITEM TWO ", " ITEM THREE ", "ITEM FOUR"], 
#=> [" ITEM ONE ", " ITEM TWO ", " ITEM THREE ", "ITEM FOUR"] 
#=> ] 

Это использует выражение CSS, чтобы выбрать строки, и для каждого его находит дочерние элементы (<td>) в виде массива, извлекает правильные по индексу, а затем получает text для каждого.

+0

, что намного меньше кода, чем я думал, что потребуется. Благодаря! –

0

Этот эпизод Railscasts действительно помог мне в таких вещах, потому что они показали инструмент под названием SelectorGadget, благодаря которому было очень легко выяснить, какие селектора CSS использовать для идентификации целевой информации.

Railscasts #190: Screen scraping with Nokogiri

Смежные вопросы