(Rails 5 + PostGreSQL)
我需要阅读网站的内容,并保存此页面的HTML
部分。
例如,假设我想在此页面上仅获取运动员的描述:https://www.olympic.org/usain-bolt:section.text-content
元素。
如何在Rails
中将html
存储在我的数据库中,以便以后通过API
提供?
有人对此有所了解吗?
答案 0 :(得分:1)
Nokogiri可以通过CSS selectors来完成您的需要。
如果没有,您可以使用Net:HTTP将页面内容转换为局部变量,然后您可以使用字符串操作来查找所需的内容并存储它。不幸的是,我认为没有任何直接的方法来专门用这种方法选择那个元素。
答案 1 :(得分:1)
您可以轻松打开网址,解析html并访问您指向的元素,例如:
require 'nokogiri'
require 'open-uri'
url = 'https://www.olympic.org/usain-bolt'
doc = Nokogiri.HTML(open(url))
puts doc.css('section.text-content').text
由于你已经掌握了数据,所以你需要一个存储模型,你可以创建一个新模型,就像名为Athlete的例子一样,使用rails generate命令和迁移,比如
$ rails g model Athlete description:text
$ rails db:migrate
描述是一个文本数据类型属性,允许您存储大型文本,作为描述。
由于您已经有了获取数据的方法,因此您需要插入或更新数据。您可以创建新记录,然后进行更新。在rails控制台中,只需:
Athlete.create
这将创造一个没有描述的新运动员,但必须通过它的身份来获得它。之后您可以创建一个任务,在lib/tasks
文件夹中,您可以创建一个扩展名为.rake
的文件,并使用创建任务的方式添加您的代码,例如:
require 'nokogiri'
require 'open-uri'
namespace :feed do
desc 'Gets the athlete description and insert it in database.'
task athlete_description: :environment do
url = 'https://www.olympic.org/usain-bolt'
doc = Nokogiri.HTML(open(url))
description = doc.css('section.text-content').text
Athlete.find(1).update description: description
end
end
您拥有库,获取数据并使用ActiveRecord更新到记录,您可以轻松运行:
rails feed:athlete_description
# or
rake feed:athlete_description