我有一个包含以下语法的表:
<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
答案 0 :(得分:0)
i
个<td>
代码的<a>
个循环,但只有一个的tds中有('tbody tr td a')[1]
个,{{1}}不存在。
答案 1 :(得分:0)
默想:
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"