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
|