html
  • ruby-on-rails
  • ruby
  • nokogiri
  • screen-scraping
  • 2014-11-02 39 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

    相關問題