2009-05-24 5 views
3

so versuche ich die E-Mail meiner Website mit Ruby Mechanize und Hpricot extrahieren. was ich versuche, seine Schleife auf der ganzen Seite meiner Verwaltungsseite zu tun und die Seiten mit hpricot.so weit so gut zu analysieren. Dann bekomme ich:mechanisieren html kratzen Problem

Exception `Net::HTTPBadResponse' at /usr/lib/ruby/1.8/net/http.rb:2022 - wrong status line: *SOME HTML CODE HERE* 

, wenn es eine Reihe von Seite zu analysieren, seine beginnt mit einem Timeout und dann drucken Sie den HTML-Code der Seite. kann nicht verstehen, warum? Wie kann ich das debuggen? es scheint wie mechanize kann mehr als 10 Seite in Folge bekommen ?? ist es möglich?? dank

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 
     #[email protected]("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 

Ende

def extrahieren (Seite) #puts search.body [email protected] („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 

Ende

Ende

puts "Start extacting E-Mails ..."

start = ARGV [0] .to_i

h = Harvester.new (186) h.login h .harvest (Start)

Antwort

3

Mechanize setzt ful l Inhalt einer Seite in den Verlauf, dies kann beim Blättern durch viele Seiten Probleme verursachen. Um die Größe des Verlaufs zu begrenzen, versuchen Sie

@mech = WWW::Mechanize.new do |agent| 
    agent.history.max_size = 1 
end