在我的文本文件中是一個URL列表。使用機械化我使用該列表解析出標題和元描述。然而,其中一些URL頁面沒有meta描述其停止我的劇本有一個零誤差:如何忽略來自Mechanize的已分析值的循環中的零值?
undefined method `[]' for nil:NilClass (NoMethodError)
我讀過起來,如果我使用Rails看到的解決方案,但對Ruby我已經只看到reject
和compact
作爲忽略零值的可能解決方案。我在循環結尾添加了compact
,但這似乎沒有做任何事情。
require 'rubygems'
require 'mechanize'
File.readlines('parsethis.txt').each do |line|
page = Mechanize.new.get(line)
title = page.title
metadesc = page.at("head meta[name='description']")[:content]
puts "%s, %s, %s" % [line.chomp, title, metadesc]
end.compact!
這只是在這樣的文本的URL列表:
http://www.a.com
http://www.b.com
這是什麼將在控制檯輸出示例:
http://www.a.com, Title, This is a description.
如果內的URL列表沒有關於該特定頁面的描述或標題,它拋出了零錯誤。我不希望它跳過任何網址,我希望它能通過整個列表。
一種方式是'page.at(「head meta [name ='description']」)。attributes [:content]'。 –
當頁面沒有描述內容時,你想要發生什麼?完全跳過該條目或返回沒有兩個結尾逗號的字符串?你爲什麼'放'生成的字符串?你想要屏幕輸出,然後依靠'puts'的副作用返回輸出的值嗎?一般來說,這不是我們如何編寫這些代碼,所以對數據的更好描述會對您有所幫助。另外,如果您給出了一些示例URL和輸出示例,它會非常有幫助。這看起來像一個XY問題,你問了Y但是需要詢問X. –
@theTinMan不是那麼複雜。我不希望任何條目被跳過,只是當它在控制檯上輸出時(通過puts)它不會因爲沒有描述而拋出錯誤。只要您擁有網址,機械化寶石可以讓您從網頁獲取數據。所以我有一個文本文件,它有逐行列表的url。控制檯將輸出url,除了其相關的html標題和meta描述,如下所示:http:// www.a.com,Title,這是控制檯中每行的描述。 –