механизировать проблему очистки html

поэтому я пытаюсь извлечь электронную почту моего сайта, используя ruby ​​mechanize и hpricot. что я пытаюсь сделать свой цикл на всех страницах моей административной части и анализировать страницы с помощью hpricot. Пока все хорошо. Затем я получаю:

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

когда он анализирует кучу страниц, он начинается с тайм-аута, а затем печатает html-код страницы. не могу понять почему? как я могу отладить это? кажется, что механизация может получить более 10 страниц подряд ?? Является ли это возможным?? Благодарность

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

end

def extract(page) #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 

конец

конец

ставит "начало получения электронных писем..."

старт =ARGV[0].to_i

h=Harvester.new(186) h.login h.harvest(начало)


person fenec    schedule 24.05.2009    source источник


Ответы (1)


Mechanize помещает в историю полное содержимое страницы, это может вызвать проблемы при просмотре многих страниц. Чтобы ограничить размер истории, попробуйте

@mech = WWW::Mechanize.new do |agent|
  agent.history.max_size = 1
end
person Fluffy    schedule 27.08.2009