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)