我正在红宝石中提出请求;
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欧元。
我只能得到它的索引。但后来不知道该怎么办。
可能吗 ?或者还有其他方法吗?
谢谢
在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 gem。
Nokogiri(锯)是一个Rubygem,提供支持XPath和CSS选择器的HTML,XML,SAX和Reader解析器。
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..."