为什么我提取/刮取的HTML代码呈现为文本



我想从这个网页中提取搜索表单,并将其呈现在我的Rails应用程序的"static_pages/home"页面上:Codepen"static_paies/home"示例

采取的步骤:

  1. 我创建了以下Ruby脚本来验证我是否真的可以提取表单:

    require 'nokogiri'
    require 'open-uri'
    url = 'http://websoc.reg.uci.edu/perl/WebSoc'
    data = Nokogiri::HTML(open(url))
    form = data.xpath('//form[@action="http://websoc.reg.uci.edu/perl/WebSoc"]')
    puts form 
    
  2. 转移到Rails,我在gem文件中包含了Nokogiri和OpenURI,并使用bundle安装了gem。

  3. 我创建了一个StaticPages控制器:

    class StaticPagesController < ApplicationController
     def home
      require 'nokogiri'
      require 'open-uri'
      url = 'http://websoc.reg.uci.edu/perl/WebSoc'
      data = Nokogiri::HTML(open(url))
      @form = data.xpath('//form[@action="http://websoc.reg.uci.edu/perl/WebSoc"]')
     end
    end
    
  4. 以及附带的视图:

    <h1>StaticPages#home</h1>
    <p>Find me in app/views/static_pages/home.html.erb</p>
    <%= @form %>
    

HTML代码被成功提取,但它被呈现为文本而不是HTML。看起来要么:

@form = data.xpath('//form[@action="http://websoc.reg.uci.edu/perl/WebSoc"]')

<%= @form %>

将提取的HTML转换为文本。如何将提取的HTML内容作为HTML而非文本插入?

我的研究建议使用Net:HTTP。

只需在视图中放置<%= @form.html_safe %>,就会返回一个错误。这是因为@form的格式是文本,而不是HTML。纠正此问题:

  1. 转到静态页面控制器并更改:

    @form = data.xpath('//form[@action="http://websoc.reg.uci.edu/perl/WebSoc"]') 
    

    至@form=data.xpath('//form[@action="http://websoc.reg.uci.edu/perl/WebSoc"]').to_html.

  2. 现在@form将HTML存储为HTML,而不是文本。为了在视图中呈现这一点,我们需要更改:

    <%= @form %>
    

    <%= @form.html_safe %>
    

默认情况下,Rails会将<%= @form %>转换为文本,作为安全预防措施;您不希望在页面中嵌入恶意代码。通过声明@form.html_safe,我们告诉Rails HTML内容是有意的,因此是安全的。这允许@form的内容在视图中呈现为HTML。

您的问题指出,您在Nokogiri::XML::NodeSet时收到文本。

"如何使用Nokogiri在两个HTML注释之间抓取HTML?"是一个类似于废弃节点的问题。一旦得到字符串html_string,就可以使用html_string.html_safe

相关内容

  • 没有找到相关文章