所以我试图提取我的网站使用红宝石机械化和hpricot的电子邮件。 什么我试图做我的行政管理方面的所有页面上的循环,并用hpricot.so解析页面非常好。然后我得到:机械化HTML刮取问题
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
末
高清提取物(页) #puts search.body [email protected](“HTTP://***.com/admin/members.asp ?行动=搜索&术语= & STATE_ID = & R = 500 & p =#{页}“) 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 ħ .harvest(开始)