我有以下語法表:HREF解析問題的for循環
<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
什麼是您預期的輸出?您的代碼也無效。我們需要看到句法正確的代碼。請閱讀「[問]」和「[mcve]」。像'$ numRows'這樣的全局使用是代碼味道;根本不用理解爲什麼你應該使用全局變量,這表明你不瞭解變量範圍。 'numRows'應該是'num_rows',因爲Ruby中的變量是snake_case,而不是camelCase。 –
你是怎麼得到這個HTML的?如果您使用瀏覽器向您顯示源代碼,則不要這樣做;相反,請使用cURL,'wget',HTTPClient等請求HTML,這樣可以在不使用瀏覽器的情況下檢索HTML。瀏覽器在HTML上進行修改,並且經常添加不在原始HTML中的'tbody'標籤。 –
我獲得了html如下 - page = Nokogiri :: HTML open('https://support.apple.com/en-us/HT201222') – A21