Skip to content

Instantly share code, notes, and snippets.

@borama
Last active April 14, 2020 05:10
Show Gist options
  • Save borama/1aac1b867705e4d48d9ef3771d627e0b to your computer and use it in GitHub Desktop.
Save borama/1aac1b867705e4d48d9ef3771d627e0b to your computer and use it in GitHub Desktop.
Skript pro stažení kompletní petice z webu petice.com
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
@borama
Copy link
Author

borama commented Apr 14, 2020

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ží do podpisy.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.

  1. 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.

  2. 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

  3. Smažte všechny podpisy v CSV (tj. řádky v souboru) od podpisu s tímto číslem až do konce

  4. 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)

  5. A skript znovu spusťte: ruby podpisy.rb. Nové podpisy se přidají na konec souboru.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment