html
  • ruby-on-rails
  • ruby
  • nokogiri
  • screen-scraping
  • 2014-11-02 44 views 2 likes 
    2

    我想提取的搜索表单,从this webpage,并使其在“static_pages /家”我的Rails应用程序的页面上:采取Codepen Example of "static_pages/home"为什么我的提取/抓取的HTML代码呈现为文本?

    步骤:

    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的,我包括引入nokogiri和OpenURI在我的宝石文件和用于捆绑安装的宝石。

    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代码被成功地抽取,但它呈现as text代替HTML。这似乎是两种:

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

    <%= @form %> 
    

    将提取的HTML文本。我如何插入我已经提取为HTML的HTML内容而不是文本?

    我的研究建议使用Net:HTTP

    +1

    是不是因为Rails会自动转义'<%= @form %>'中的html代码,对不对?如何使用像“<%= @ form.html_safe%>'? (对不起,我不知道用什么方式将它写入你的Rails版本) – gh640 2014-11-02 01:09:02

    +0

    这会帮助你https://cbabhusal.wordpress.com/2015/08/28/ruby-on-rails-why-do-we -need-to-html_safe-string-why-html-tags-not-rendered/ – illusionist 2015-08-29 01:26:03

    回答

    1

    简单地把<%= @form.html_safe %>,在视图中会返回一个错误。这是因为@form被格式化为文本,而不是HTML格式。 要校正此:

    1. 去静态页面控制器和改变:

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

      到 @form = data.xpath('//形式[@行动=“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视图中呈现在视图中。

    0

    你的问题表明你得到的文本是Nokogiri::XML::NodeSet

    How do I scrape HTML between two HTML comments using Nokogiri?”是一个类似的问题报废节点。一旦得到字符串html_string,您可以使用html_string.html_safe

    +0

    它返回一个错误:“未定义的方法'html_safe'为#” – jkarimi 2014-11-02 01:11:11

    相关问题