HTTPリクエストにNet::HTTPを使用していて、応答を返しています。
uri = URI("http://www.example.com")
http = Net::HTTP.start(uri.host, uri.port, proxy_host, proxy_port)
request = Net::HTTP::Get.new uri.request_uri
response = http.request request # Net::HTTPResponse object
body = response.body
このHTML応答を解析するために、Nokogiri gemを使用する必要がある場合は、次のようにします。
nokogiri_obj = Nokogiri::HTML(body)
しかし、Mechanize gemを使用したい場合は、これを行う必要があります。
agent = Mechanize.new
mechanize_obj = agent.get("http://www.example.com")
Net :: Httpを使用してHTML応答を取得し、Mechanize gemを使用して、使用する代わりにMechanizeオブジェクトに変換することは可能 agent.get()
ですか?
編集:
agent.get()
このメソッドを回避する理由は、EventMachine::Iterator
同時EM-HTTP
リクエストを作成するために使用しようとしているためです。
EventMachine.run do
EM::Iterator.new(urls, 3).each do |url,iter|
puts "giving #{url} to httprequest now"
http = EM::HttpRequest.new(url).get
http.callback { |resp|
uri = resp.send(:URI, url)
puts "inside callback of #{url}"
body = resp.response
page = agent.parse(uri, resp, body)
}
iter.next
end
end
しかし、それは機能していません。エラーが発生しました:
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/mechanize-2.5.1/lib/mechanize.rb:1165:in`parse': undefined method `[]' for #<EventMachine::HttpClient:0x0000001c18eb30> (NoMethodError)
parse
このメソッドを使用すると、Net::HTTP
正常に機能し、Mechanizeオブジェクトを取得します。
uri = URI("http://www.example.com")
http = Net::HTTP.start(uri.host, uri.port, proxy_host, proxy_port)
request = Net::HTTP::Get.new uri.request_uri
response = http.request request # Net::HTTPResponse object
body = response.body
agent = Mechanize.new
page = agent.parse(uri, response, body)
parse
em-httpを使用して いるときに、メソッドに間違った引数を渡していませんか?