Skip to content

Commit

Permalink
Scraper for 2015 French Regional Elections results
Browse files Browse the repository at this point in the history
  • Loading branch information
chrismytton committed Jun 13, 2017
1 parent c115c3c commit ae73f22
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions scraper.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true

require 'bundler/setup'
require 'pry'
require 'require_all'
require 'scraped'
Expand All @@ -14,3 +15,55 @@ def scrape(h)
url, klass = h.to_a.first
klass.new(response: Scraped::Request.new(url: url).response)
end

class PartyListPage < Scraped::HTML
field :party_lookup do
noko.css('.tableau-nuances tr').map { |row| row.css('td').map(&:text) }.to_h
end
end

class ElectionResultsPage < Scraped::HTML
field :region_urls do
noko.css('#listeRG option/@value').drop(1).map do |result_url|
URI.join(url, result_url).to_s
end
end
end

class RegionResultsPage < Scraped::HTML
field :id do
url.split('/').last.chomp('.html')
end

field :region_name do
noko.css('.pub-resultats-entete h2:first').text
end

field :winner_name do
winner_row.xpath('./td[1]/a/text()').text
end

field :winner_party_code do
winner_row.xpath('./td[2]/text()').text
end

private

def winner_row
noko.xpath('.//table[1]/tbody/tr[1]')
end
end

parties_url = 'https://www.interieur.gouv.fr/Elections/Les-resultats/Regionales/elecresult__regionales-2015/(path)/regionales-2015/nuances.html'
parties = scrape(parties_url => PartyListPage).party_lookup

results_url = 'https://www.interieur.gouv.fr/Elections/Les-resultats/Regionales/elecresult__regionales-2015/(path)/regionales-2015/index.html'
page = scrape(results_url => ElectionResultsPage)

page.region_urls.each do |url|
region = scrape(url => RegionResultsPage)
data = region.to_h
data[:winner_party] = parties[data[:winner_party_code]]
ScraperWiki.save_sqlite([:id], data)
end

0 comments on commit ae73f22

Please sign in to comment.