-
Notifications
You must be signed in to change notification settings - Fork 1
/
page_scrape.rb
89 lines (82 loc) · 3.26 KB
/
page_scrape.rb
1
2
3
4
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
require 'watir'
require 'CSV'
client = Selenium::WebDriver::Remote::Http::Default.new
@browser = Watir::Browser.new :chrome, http_client: client
position = @browser.window.move_to 1400, 0
@col_sep = '|'
def scrape(distrito, concelho, freguesia)
distrito_list = @browser.select_lists(aria_label: 'Distrito/Região Autónoma')
distrito_list[0].wait_until(&:present?).select(text: distrito)
concelho_list = @browser.select_lists(aria_label: 'Concelho')
concelho_list[0].wait_until(&:present?).select(text: concelho)
freguesia_list = @browser.select_lists(aria_label: 'Freguesia')
freguesia_list[0].wait_until(&:present?).select(text: freguesia)
sleep 2
rows = @browser.divs(class: 'chart-row')
row_arr = []
rows.each { |td| row_arr << td.text.to_s.gsub("\n", ' | ') }
content = row_arr.reject(&:empty?).join(', ').gsub('votos, ', '| ')
content = content.gsub(/\s+/, '').gsub('votos', '').split('|')
CSV.open('corrections_table.csv', 'a+', col_sep: @col_sep,
headers: %w[Distrito Concelho Freguesia Partido Voto(%) Votos]) do |csv|
csv << [distrito.to_s, concelho.to_s, freguesia.to_s].push(*content)
end
end
s = 'Castelo Branco|Fundão|Souto da Casa'
a = s.split(/\n+/)
a = a.map { |e| e.split('|') }
@browser.goto 'https://www.legislativas2022.mai.gov.pt/resultados/territorio-nacional'
@browser.link(text: 'Localidades').click
a.each do |e|
scrape(e[0], e[1], e[2])
end
@browser.close
# distritos.each do |d|
# distrito[0].wait_until(&:present?).select(text: d)
# # puts browser.h1.text
# # puts browser.h2.text
# concelho = browser.select_lists(aria_label: 'Concelho')
# sleep 1
# a_two = []
# concelho.each { |e| a_two << e.innertext }
# concelhos = a_two[0].to_s.split(/\n+/).drop(1)
# concelhos
# sleep 2
# concelhos.each do |c|
# # puts browser.h1.text
# # puts browser.h2.text
# concelho[0].wait_until(&:present?).select(text: c)
# freguesia = browser.select_lists(aria_label: 'Freguesia')
# sleep 1
# a = []
# freguesia.each { |e| a << e.innertext }
# freguesias = a[0].to_s.split(/\n+/).drop(1)
# # freguesias.each {|f| puts "#{d}|#{c}|#{f}" }
# sleep 1
# freguesias.each do |f|
# freguesia[0].wait_until(&:present?).select(text: f)
# sleep 2
# rows = browser.divs(class: 'chart-row')
# row_arr = []
# rows.each { |td| row_arr << td.text.to_s.gsub("\n", ' | ') }
# content = row_arr.reject(&:empty?).join(', ').gsub('votos, ', '| ')
# content = content.gsub(/\s+/, '').gsub('votos', '').split('|')
# total = "#{d}|#{c}|#{f}|#{content}"
# CSV.open('table.csv', 'a+', col_sep: col_sep,
# headers: %w[Distrito Concelho Freguesia Partido Voto(%) Votos]) do |csv|
# csv << [d.to_s, c.to_s, f.to_s].push(*content)
# end
# # File.open('table.csv', 'w') { |file| file.puts "#{d}|#{c}|#{f}|#{content}" }
# end
# end
# end
# browser.close
# distrito = distrito
# concelho = browser.select_lists(aria_label: "Concelho")
# concelho = concelho.drop(1)
# freguesia = browser.select_lists(aria_label: "Freguesia")
# freguesia = freguesia.drop(1)
# rows = browser.divs(class:"chart-row")
# row_arr = []
# rows.each {|td| row_arr << td.text}
# row_arr.each {|e| e.to_s.gsub("\n", ", ")}