gpt4 book ai didi

Ruby Mechanize、Nokogiri 和 Net::HTTP

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:51 25 4
gpt4 key购买 nike

我正在使用 Net::HTTP 进行 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

如果我必须使用 Nokogiri gem 来解析这个 HTML 响应,我会这样做:

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)

当我对 Net::HTTP 使用 parse 方法时,它工作正常并且我得到了 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)

我在使用 em-http 时是否为 parse 方法传递了错误的参数?

最佳答案

我不确定您为什么认为使用 Net::HTTP 会更好。 Mechanize 将处理重定向和 cookie,并提供对 Nokogiri 已解析文档的随时访问。

require 'mechanize'

agent = Mechanize.new
page = agent.get('http://www.example.com')

# Use Nokogiri to find the content of the <h1> tag...
puts page.at('h1').content # => "Example Domains"

请注意,设置 user_agent 并不是访问 example.com 所必需的。


如果您想使用线程引擎来检索页面,请查看Typhoeous and Hydra。 .

关于Ruby Mechanize、Nokogiri 和 Net::HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12047100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com