在 http get 请求响应体中进行 Ruby 搜索



我正在用 ruby 发出一个 get 请求,就像;

    require 'net/http'
    require 'uri'
    uri = URI.parse("https://www.test.com")
    request = Net::HTTP::Get.new(uri)
    request.content_type = "application/json"
    request["Accept"] = "application/json"
    req_options = {
      use_ssl: uri.scheme == "https",
    }
    response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
      http.request(request)
    end
    # response.code
    response.body

这是一个返回纯文本的 html 源。我想在此返回中搜索一些 id 元素并获取其值。它似乎是一个爬虫。但我从来没有写过。

例如,有一个字段,例如;

<div id='price'>1000€</div>

我想搜索<div id='price'>并获得1000欧元。

我只能得到它的索引。但是不知道我该怎么办。

可能吗?

或者有其他方法吗?

谢谢

您可能想使用 https://github.com/sparklemotion/nokogiri gem。

Nokogiri (鋸( 是一个 Rubygem,提供 HTML、XML、SAX 和 Reader 解析器 支持 XPath 和 CSS 选择器。

require 'nokogiri'
html = <<HTML
<div id="block1">
    <a href="http://google.com">link1</a>
</div>
<div id="block2">
    <a href="http://stackoverflow.com">link2</a>
    <a id="tips">just a bookmark</a>
</div>
HTML
doc = Nokogiri::HTML(html)
doc.css('#block1 a[href]').text
#=>link1

要修改您的示例,请执行以下操作:

require 'net/http'
require 'uri'
require 'nokogiri'
uri = URI.parse("https://www.example.com")
request = Net::HTTP::Get.new(uri)
request.content_type = "application/json"
request["Accept"] = "application/json"
req_options = {
  use_ssl: uri.scheme == "https",
}
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end
response.body
doc = Nokogiri::HTML.parse(response.body)
doc.css('p').text;
#=> "This domain is established to be used for illustrative examples in documents. You may use thisn    domain in examples without prior coordination or asking for permission.More information..."

最新更新