var parser = function(i, tr){
var item = $(tr)
, hour = item.find("td:eq(0)").text()
, title = item.find("td:eq(1)").text();
document.save({
hour : hour,
title : title
});
};
$(".table-striped tbody tr").each(parser);
Slide 21
Slide 21 text
Nokogiri (ڒ)
Slide 22
Slide 22 text
Nokogiri (ڒ)
Extensão em C
Buscas em XPath ou
CSS3 selectors
Slide 23
Slide 23 text
parser = Nokogiri::HTML(wewebconf_html)
parser.search(".table-striped tbody tr").each do |tr|
hour = tr.find("td:eq(0)")
title = tr.find("td:eq(0)")
...
end
Slide 24
Slide 24 text
ScraperWiki
Slide 25
Slide 25 text
ScraperWiki
Web Plataforma
Ruby, Python e PHP
Slide 26
Slide 26 text
scraperwiki.com/scrapers/funk_download
Slide 27
Slide 27 text
def download_funk(category)
target = "#{BASE_URL}?cat=#{category}"
music_index_parser = parser(target)
music_index_parser.search(".download-funk").each do |parser_musica|
begin
music_show_link = parser_musica.search("a")[0].attr("href")
music_show_parser = parser("#{BASE_URL}#{music_show_link}")
music_info = music_show_parser.search("#interna_a")
name = music_info.search("h2").text()
link = music_info.search(".texto a").attr("href")
download = parser_musica.search(".contador").text()
date = parser_musica.search(".data").text()
ScraperWiki.save(["name"], ....)
rescue
next
end
end
end
class Beco203Bot < AugustaBot
def create_parties!
end
private
def parties
parser(".agenda-item.beco-sp", "capa-beco-sp.php")
end
end
class Beco203PartyBot < AugustaPartyBot
def name
end
end
Slide 33
Slide 33 text
require 'spec_helper'
describe Beco203Bot do
let(:beco_bot) { Beco203Bot.new }
describe "create_parties!" do
before do
...{stub_requests}...
end
it "saves a parties with name" do
beco_bot.create_parties!
Party.first.name.should == 'Festa 1'
end
end
end
Slide 34
Slide 34 text
class Beco203Bot < AugustaBot
def create_parties!
parties.each do |item|
party_bot = Beco203PartyBot.new({params})
party_bot.name =(item/".texto").text
Party.create! party_bot.attributes
end
end
private
def parties
parser(".agenda-item.beco-sp", "capa-beco-sp.php")
end
end
class Beco203PartyBot < AugustaPartyBot
def name
parser.search(".conteudo-interna h1").text.clean
end
end
Qual era o preço médio uma casa no São Paulo
em 1921? Que balada vai acontecer hoje na Rua
Augusta? Dados para responder muitas, muitas
perguntas como essas estão por aí na Internet em
algum lugar - mas nem sempre é fácil encontrar.
- Hackeado do thedatahub.org