Class: TopRankedSkiResorts::Scraper

Inherits:
Object
  • Object
show all
Defined in:
lib/top_ranked_ski_resorts/scraper.rb

Constant Summary collapse

BASE_ZRANKINGS_URL =
"https://zrankings.com"

Class Method Summary collapse

Class Method Details

.primary_pageObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/top_ranked_ski_resorts/scraper.rb', line 5

def self.primary_page
	doc = Nokogiri::HTML(open(BASE_ZRANKINGS_URL))
	doc.search("tbody tr").map do |tbody_tr|
		hrefs = tbody_tr
					.search("td a")
					.map { |a| a ['href'] if a['href'] =~ /^\/ski-resorts\// }.compact.uniq
		
		hrefs.each do |href|
			remote_url = BASE_ZRANKINGS_URL + href
			second = Nokogiri::HTML(open(remote_url))
			TopRankedSkiResorts::Resort.new({ 
				rank: tbody_tr.search("td:first-of-type").text.to_i, 
				place: tbody_tr.search("td.name-rank a").text, 
				state: tbody_tr.search("td.name-rank span").text, 
				true_snowfall: tbody_tr.search("td.desktop-375").text, 
				acreage: tbody_tr.search("td.desktop-750").text, 
				vertical_drop: tbody_tr.search("td.desktop-620").text, 
				summit_elevation: tbody_tr.search("td.desktop-850").text, 
				lifts: tbody_tr.search("td.desktop-950").text, 
				score: tbody_tr.search("td#score").text.to_i, 
				total_runs: second.search("div.side-stats-2 ul li:nth-child(2) span").text, 
				longest_run: second.search("div.side-stats-2 ul li:nth-child(3) span").text, 
				terrain_parks: second.search("div.side-stats-2 ul li:nth-child(6) span").text, 
				halfpipes: second.search("div.side-stats-2 ul li:nth-child(8) span").text, 
				airport: second.search("div.side-stats-2 ul li:nth-child(10) span").text, 
				protip: second.search("div.toptiptext p").text
			})
		end
	end
end