Поиск по Ruby в http получить тело ответа на запрос - PullRequest
1 голос
/ 24 марта 2019

Я делаю запрос на получение в ruby, как;

    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 €.

Я могу получить только его индекс,Но тогда не знаю, что мне делать.

Возможно ли это?или есть другой способ?

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

В Ruby у нас есть Nokogiri, который позволяет вам искать документы с помощью селекторов XPath или CSS3:

doc = Nokogiri::HTML(open("https://www.test.com"))
doc.at_css('div#price').text

или:

doc = Nokogiri::HTML response.body
doc.at_css('div#price').text

https://github.com/sparklemotion/nokogiri

0 голосов
/ 24 марта 2019

Возможно, вы захотите использовать 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 this\n    domain in examples without prior coordination or asking for permission.More information..."
...