Ruby 将特定URL添加到基本路径,以便使用Nokogiri刮取网页

Ruby 将特定URL添加到基本路径,以便使用Nokogiri刮取网页,ruby,web-scraping,nokogiri,Ruby,Web Scraping,Nokogiri,我是ruby和这个网站的新手,所以请容忍我!我一直在谷歌上搜索,结果一无所获 我试图将一个学院对象传递给我的class方法scrape_college_info,该方法是我在上一个class方法scrape_illinois_index_页面中创建的,这样我就可以为用户使用Pry和Nokogiri选择的特定学院获取下一级信息。不幸的是,我一直得到一个参数错误 我知道这不是最漂亮的,但这是我现在的代码: class College attr_accessor :name, :locat

我是ruby和这个网站的新手,所以请容忍我!我一直在谷歌上搜索,结果一无所获

我试图将一个
学院
对象传递给我的class方法
scrape_college_info
,该方法是我在上一个class方法
scrape_illinois_index_页面
中创建的,这样我就可以为用户使用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
班级学院
属性访问器:名称、位置、大小、类型、url
基本路径=”https://www.collegesimply.com/colleges/illinois/"
def自助学院
自修学院
结束
def self.scrape_学院
学院=self.scrape\u伊利诺伊州\u索引\u页面
学院
结束
def self.scrape_伊利诺伊州_索引_页面
doc=Nokogiri::HTML(打开(基本路径))
#捆绑,撬动
学院=[]
doc.xpath(“//tr”)。每个do | doc|
大学=自我更新
如果doc.css(“td”)[0]!=无
college.name=doc.css(“td”)[0].text.strip
结束
如果文件css(“td”)[1]!=无
college.location=doc.css(“td”)[1].text.strip
结束
如果doc.css('table.table tbody tr td:nth child(1)a')[0]!=无
college.link=doc.css('table.table tbody tr td:nth child(1)a')[0]['href']
结束

学院尝试下面的代码以获得学院。链接

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

希望这能解决你的问题。如果它对您有效,请告诉我。

尝试使用
URI。加入

new_url = URI.join(BASE_PATH, college.link).to_s

您可以分享您的确切错误吗?您输入什么命令来获取错误?另外,请发布错误的完整堆栈跟踪。我运行了
College.College
,没有出错。另外,你不需要
colleges=
或它后面的两行,我认为在
scrape\u colleges
方法中不需要。谢谢你的反馈!因此,在我的控制台中,我通过输入./bin/console来运行控制台,一旦进入控制台,我就进入College.scrape_College_info来尝试访问我的pry。我得到的确切错误如下:[17:11:44](master)illinois colleges//♥ ./bin/console 2.3.1:001>College.scrape\u College\u info(College)name错误:未定义的局部变量或方法:main:Object from(irb):1 from./bin/console:14:in
'