mecanizar html problema raspado
-
05-09-2019 - |
Pregunta
por lo que estoy tratando de extraer el correo electrónico de mi sitio web utilizando el rubí y mecanizar hpricot. lo que una tratando de hacer su bucle en toda la página de mi lado de la administración y analizar las páginas con hpricot.so ahora todo va bien. Entonces consigo:
Exception `Net::HTTPBadResponse' at /usr/lib/ruby/1.8/net/http.rb:2022 - wrong status line: *SOME HTML CODE HERE*
cuando se analiza un grupo de página, sus aperturas con un tiempo de espera y luego imprimir el código HTML de la página. No puedo entender por qué? ¿Cómo puedo depurar eso? parece como su mecanizar puede obtener más de 10 páginas sobre una fila ?? ¿¿Es posible?? gracias
require 'logger'
require 'rubygems'
require 'mechanize'
require 'hpricot'
require 'open-uri'
class Harvester
def initialize(page)
@page=page
@agent = WWW::Mechanize.new{|a| a.log = Logger.new("logs.log") }
@agent.keep_alive=false
@agent.read_timeout=15
end
def login
f = @agent.get( "http://****.com/admin/index.asp") .forms.first
f.set_fields(:username => "user", :password =>"pass")
f.submit
end
def harvest(s)
pageNumber=1
#@agent.read_timeout =
s.upto(@page) do |pagenb|
puts "*************************** page= #{pagenb}/#{@page}***************************************"
begin
#time=Time.now
#search=@agent.get( "http://****.com/admin/members.asp?action=search&term=&state_id=&r=500&p=#{page}")
extract(pagenb)
rescue => e
puts "unknown #{e.to_s}"
#puts "url:http://****.com/admin/members.asp?action=search&term=&state_id=&r=500&p=#{page}"
#sleep(2)
extract(pagenb)
rescue Net::HTTPBadResponse => e
puts "net exception"+ e.to_s
rescue WWW::Mechanize::ResponseCodeError => ex
puts "mechanize error: "+ex.response_code
rescue Timeout::Error => e
puts "timeout: "+e.to_s
end
end
end
def extract(page)
#puts search.body
search=@agent.get( "http://***.com/admin/members.asp?action=search&term=&state_id=&r=500&p=#{page}")
doc = Hpricot(search.body)
#remove titles
#~ doc.search("/html/body/div/table[2]/tr/td[2]/table[3]/tr[1]").remove
(doc/"/html/body/div/table[2]/tr/td[2]/table[3]//tr").each do |tr|
#delete the phone number from the html
temp = tr.search("/td[2]").inner_html
index = temp.index('<')
email = temp[0..index-1]
puts email
f=File.open("./emails", 'a')
f.puts(email)
f.close
end
end
end
puts "starting extacting emails ... "
start =ARGV[0].to_i
h=Harvester.new(186)
h.login
h.harvest(start)
Solución
Mechanize pone contenido completo de una página en la historia, esto puede causar problemas cuando se navega a través de muchas páginas. Para limitar el tamaño de la historia, intente
@mech = WWW::Mechanize.new do |agent|
agent.history.max_size = 1
end