Last active
April 14, 2020 05:10
-
-
Save borama/1aac1b867705e4d48d9ef3771d627e0b to your computer and use it in GitHub Desktop.
Skript pro stažení kompletní petice z webu petice.com
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "nokogiri" | |
require "open-uri" | |
require "csv" | |
# set the petition_name, e.g. for https://www.petice.com/puste_tatinky_k_porodu: | |
petition_name = "puste_tatinky_k_porodu" | |
# if you want to add later signatures, set the first page number to retrieve | |
from_page = 1 | |
rows_per_page = 100 | |
CSV.open("podpisy.csv", "ab") do |csv| | |
url = "https://www.petice.com/signatures.php?tunnus=#{petition_name}&page_number=#{from_page}&num_rows=#{rows_per_page}" | |
doc = Nokogiri::HTML(open(url)) | |
last_page = doc.css("ul.pagination").first.css("li").map(&:text).map(&:strip)[-2].to_i | |
puts "Found #{last_page - from_page + 1} pages to scrape" | |
(from_page..last_page).each do |page_number| | |
url = "https://www.petice.com/signatures.php?tunnus=#{petition_name}&page_number=#{page_number}&num_rows=#{rows_per_page}" | |
doc = Nokogiri::HTML(open(url)) | |
doc.css("table#signatures tbody tr").each do |row| | |
cells = row.css("td").map(&:text).map(&:strip) | |
csv << cells | |
csv.flush | |
p cells | |
end | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Tento malý ruby skript stáhne veškeré podpisy dané petice z webu petice.com a uloží jako CSV soubor.
Jak jej použít
Je třeba mít na počítači nainstalován jazyk ruby (podrobnější instrukce).
Pak je potřeba doinstalovat knihovnu Nokogiri:
gem install nokogiri
(podrobnější instrukce).Pak je nutné nastavit název petice do proměnné
petition_name
ve skriptu. Název vezměte z URL dané petice, když si ji otevřete na webu.Nakonec stačí skript spustit:
ruby podpisy.rb
, výsledek se uloží dopodpisy.csv
.Jak později přidat další (nové) podpisy
Principiálně je nutné z CSV souboru umazat poslední předtím staženou (a neúplnou) stránku podpisů a pak dát podisy stahovat znovu dál od této stránky. Skript vždy přidává nově stažené podpisy na konec CSV souboru.
Určete číslo stránky s posledním podpisem, který máte v CSV
Číslo se určí tak, že se pořadové číslo posledního podpisu v CSV vydělí 100 a zaokrouhlí nahoru. Pokud např. má poslední podpis z CSV číslo 40776, pak tomu odpovídající stránka je 40776 / 100 = 407.76 ⟶ 408.
Spočtěte si první číslo podpisu na této poslední stránce
Číslo podpisu se určí tak, že od poslední stránky odečtete 1, vynásobíte 100 a přičtete 1: tj. např. pro stránku 408 je to (408 - 1) * 100 + 1 = 40701
Smažte všechny podpisy v CSV (tj. řádky v souboru) od podpisu s tímto číslem až do konce
Upravte proměnnou
from_page
ve skriptu a nastavte ji na poslední stránku vypočtenou v kroku 1 (v našem příkladu 408)A skript znovu spusťte:
ruby podpisy.rb
. Nové podpisy se přidají na konec souboru.