循环中的 Href 解析问题



我有一个具有以下语法的表:

<tbody>
  <tr>
   <td><a href=""></a></td>
   <td></td>
   <td></td>
  </tr>
  <tr>
   <td><a href=""></a></td>
   <td></td>
   <td></td>
  </tr>
    ......
</tbody>

我能够提取如下链接:

link = page.css('tbody tr td a')[1]['href']

但是,当我尝试在for循环中执行此操作时,它失败了,并且我收到有关未定义方法"[]"的错误:

rows = page.css('tbody tr')
$numRows = rows.count
links = Array.new
(0..$numRows-1).each do |i|
  links.push(page.css('tbody tr td a')[i]['href'])

能够使用以下代码解决我的问题:

rows = page.css('tbody tr')
rows.shift
$num_updates = rows.count
puts rows.count
links = Array.new
page.css('tbody tr td a').each do |i|
links.push(i.attr('href'))
end
columns = Hash.new
(0..$num_updates-1).each do |i|
columns[i] = rows[i].text
columns[i] = columns[i].split("n")
end

您的i循环<td>标签的数量,但其中只有一个 tds 中有<a>,因此('tbody tr td a')[1]不存在。

冥想一下:

doc = Nokogiri::HTML::DocumentFragment.parse(<<EOT)
<tbody>
  <tr>
  <td><a href="foo"></a></td>
  <td></td>
  <td></td>
  </tr>
  <tr>
  <td><a href="bar"></a></td>
  <td></td>
  <td></td>
  </tr>
</tbody>
EOT
doc.search('a').map(&:to_html)        # => ["<a href="foo"></a>", "<a href="bar"></a>"]
doc.search('a').map{ |n| n['href'] }  # => ["foo", "bar"]
doc.search('a').map{ |n| n['href'] }[1]  # => "bar"

或:

doc.search('a')[1]['href']               # => "bar"

相关内容

  • 没有找到相关文章

最新更新