-1

我正在 mechanize gem 中学习 Nokogiri,但我无法找出正确的选择器以用于从 html 表构建数组。这是我需要从中提取数据的 HTML 表:

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

我想为每行数据的第 1 到第 4 项构建一个数组。如果有人可以帮助解决语法,我将不胜感激。谢谢!!!

4

2 回答 2

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 表达式来选择行,并为每个它找到子元素 (the <td>) 作为一个数组,通过索引提取正确的元素,然后text为每个获取。

于 2013-06-15T04:19:58.013 回答
0

Railscasts 的这一集确实帮助了我做这些事情,因为他们展示了一个名为 SelectorGadget 的工具,它可以很容易地找出使用哪些 css 选择器来识别目标信息。

Railscasts #190:使用 Nokogiri 进行屏幕抓取

于 2013-06-15T07:05:31.703 回答