将特定的URL添加到BASE PATH中,以便使用Nokogiri抓取网页

时间:2018-10-24 17:48:40

标签: ruby web-scraping nokogiri

我是红宝石和这个网站的新手,所以请多多包涵!我无休止地搜索谷歌没有结果。

我正在尝试将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

2 个答案:

答案 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