我是红宝石和这个网站的新手,所以请多多包涵!我无休止地搜索谷歌没有结果。
我正在尝试将college
对象传递给在上一个类方法scrape_college_info
中创建的类方法scrape_illinois_index_page
,以便为下一个阶段收集信息。用户使用Pry和Nokogiri选择的特定学院。不幸的是,我一直收到参数错误。
我知道它不是最漂亮的,但这是我现在的代码:
class College
attr_accessor :name, :location, :size, :type, :url
BASE_PATH = "https://www.collegesimply.com/colleges/illinois/"
def self.college
self.scrape_colleges
end
def self.scrape_colleges
colleges = self.scrape_illinois_index_page
colleges
end
def self.scrape_illinois_index_page
doc = Nokogiri::HTML(open(BASE_PATH))
# binding.pry
colleges = []
doc.xpath("//tr").each do |doc|
college = self.new
if doc.css("td")[0] != nil
college.name = doc.css("td")[0].text.strip
end
if doc.css("td")[1] != nil
college.location = doc.css("td")[1].text.strip
end
if doc.css('table.table tbody tr td:nth-child(1) a')[0] != nil
college.link = doc.css('table.table tbody tr td:nth-child(1) a')[0]['href']
end
colleges << college
end
colleges
end
def self.scrape_college_info(college)
doc = Nokogiri::HTML(open(BASE_PATH + "#{college.link}"))
end
end
答案 0 :(得分:1)
尝试下面的代码以获得college.link
。
if doc.css("td")[0] != nil
college.name = doc.css("td")[0].text.strip
college.link = doc.css("td")[0].css("a").map{|a| a['href']}[0]
end
现在您可以通过大学链接,例如:
def self.scrape_college_info(college)
doc = Nokogiri::HTML(open("https://www.collegesimply.com" + "#{college.link}"))
end
希望这可以解决您的问题。如果适合您,请告诉我。
答案 1 :(得分:0)
尝试使用URI.join
:
new_url = URI.join(BASE_PATH, college.link).to_s