Skip to content

Instantly share code, notes, and snippets.

@ehlyzov
Created August 26, 2013 07:31
Show Gist options
  • Select an option

  • Save ehlyzov/6338857 to your computer and use it in GitHub Desktop.

Select an option

Save ehlyzov/6338857 to your computer and use it in GitHub Desktop.
Parse data from eip.ru using EM Syncrony
require 'rubygems'
require 'bundler'
Bundler.require
require "em-synchrony"
require "em-synchrony/em-http"
require "em-synchrony/fiber_iterator"
agent = Mechanize.new
base_uri = 'http://www.eip.ru/agency/city118/rielt'
page_array = []
EM.synchrony do
EM::Synchrony::FiberIterator.new( (1..116), 10 ).each do |page|
url = "#{base_uri}/#{page}"
page_array[page] = EventMachine::HttpRequest.new(url).get.response
puts "page #{page}"
end
EventMachine.stop
end
File.open("pages.dump", 'w') do |file|
Marshal.dump(page_array, file)
end
require 'rubygems'
require 'bundler'
Bundler.require
require 'dm-core'
require 'dm-migrations'
require 'json'
require 'csv'
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite://#{Dir.pwd}/spb.db")
class AgencyCard
include DataMapper::Resource
property :id, Serial
property :title, String
property :ein_url, String
property :email, String
property :phone, String
property :address, String
property :url, String
property :excerpt, Text
end
DataMapper.finalize
DataMapper.auto_upgrade!
dumpfile = "#{Dir.pwd}/pages.dump"
raise "dump before parse!" unless File.exists?(dumpfile)
puts "dump found!"
@pages_array = Marshal.load(File.open(dumpfile,'r').read).compact
@pages_array.each do |page|
doc = Nokogiri::HTML(page)
doc.css('.smallcard').each do |card|
email = card.xpath(".//a[starts-with(@href, 'mailto')]/text()").text
title = card.xpath("./tr[1]/td").text
AgencyCard.create({
title: title,
email: email,
excerpt: card.inner_html })
end
end
CSV.open('emails.csv', 'wb') do |csv|
AgencyCard.each do |agency|
csv << [ agency.title, agency.email, agency.id ]
end
end
source "https://rubygems.org"
gem "sqlite3"
gem "datamapper"
gem "dm-sqlite-adapter"
gem "mechanize"
gem "pry"
gem "em-synchrony"
gem 'em-http-request'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment