我正在尝试抓取网站的内容以从数据中实例化对象,但是我在抓取的页面上出现了无效链接的问题。我想弄清楚如何无法简单地遍历该链接并避免完全刮擦它。
我尝试使用它,但是没有用:
name = li.css("strong a").text.strip unless li.nil?
url = li.css("a")[0].attr("href") unless li.nil?
Player.new(name,url)
class HomepageScraper
BASE_URL = "https://www.nba.com/history/nba-at-50/top-50-players"
def self.scrape_players
page = open(BASE_URL)
parsed_HTML = Nokogiri::HTML(page)
name_lis = parsed_HTML.css("div.field-item li")
name_lis.each do |li|
name = li.css("strong a").text.strip
url = li.css("a")[0].attr("href")
Player.new(name,url)
end
end
end
我希望示例输出为:
@name = "Shaquille o neal", @url = "www.nba..."
但是收到了:
@name = "Shaquille o neal", @url = nil
错误消息是:
undefined method `attr' for nil:NilClass (NoMethodError)
答案 0 :(得分:0)
您应该在Array上使用compact
方法。
如果您需要从数组中删除nil值,这是一种有用的方法。
例如:
[1, nil, 2, nil].compact => [1, 2]
在您的情况下:
name_lis.compact.each do |li|
end
答案 1 :(得分:0)
如果您至少运行Ruby 2.3,请执行
url = li.css("a")[0]&.attr("href")
如果&.
左侧的部分为nil,则将url设置为nil,否则应用attr
。