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)

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top