0

我在我的库中设置了一个 nokogiri 脚本作为模块。我的产品表单中还有一个字段,它获取一个 url 并将其传递给 nokogiri 脚本。如何使用 nokogiri 模块解析的数据填写表单字段。本质上,我希望表单填充解析数据,以便用户只需查看产品并将其添加到数据库。

我的模块:

    module product
   def get_product
        url = ""
        product_page = Nokogiri::HTML(open(url))
        image_url = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div/div/div/div').children[3].attributes['href'].text
          title_text = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div[2]/div[2]/div/form/div/h1').text
        description = product_page.at_xpath('//*[(@id = "SITCC_1column")]//*[contains(concat( " ", @class, " " ), concat( " ", "ItemSectionContent", " " ))]').text.strip!
        curr_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "camelPrice", " " ))]').text[/[0-9\.]+/]
        base_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "SubmapPrice", " " ))]').text[/[0-9\.]+/]      
        wm_item_num = url.split("/").last
        id_str = "walmart_#{wm_item_num}"

      end
    end
4

1 回答 1

0

请原谅我的语法,我认为解决问题的方法是这样的,

 ====================================Module================================            
        module product
                   def get_product(product)
                        product_page = Nokogiri::HTML(open(product.url))
                        product.image_url = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div/div/div/div').children[3].attributes['href'].text
                        product.title_text = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div[2]/div[2]/div/form/div/h1').text
                        product.description = product_page.at_xpath('//*[(@id = "SITCC_1column")]//*[contains(concat( " ", @class, " " ), concat( " ", "ItemSectionContent", " " ))]').text.strip!
                        product.curr_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "camelPrice", " " ))]').text[/[0-9\.]+/]
                        product.base_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "SubmapPrice", " " ))]').text[/[0-9\.]+/]      
                        product.wm_item_num = url.split("/").last
                        product.id_str = "walmart_#{wm_item_num}"

                        product # returning product after parsing the url and setting other fields.

                      end
                    end

    ====================================View================================


                <%= form_tag url_for(:controller => 'products', :action => 'parse_url') do  %>

                   <p>
                    <%= label_tag :enter_url %> :<br />
                    <%= text_field_tag :url %>
                  </p>   

                  <p class="button"><%= submit_tag "Parse"  %></p>

    ====================================Controller================================

            class ProductsController < ApplicationController
             include MyModule #if your file name is my_module.rb in /lib folder.

              def parse_url
                @product = Product.new
                @product = get_product(@product)
                render ('products/new')
              end

              def create

                @product = Product.new(params[:products]) # the usual way

                if @product.save
                else
                end

              end

            end

    ====================================View================================

                <%= form_for @product, :url => {:controller => 'products', :action => 'create'} do |f| %>

                <p>
                    <%= f.label :image_url %> : <%= f.text_field :image_url %>
                </p>
                <p>
                    <%= f.label :title_text %> : <%= f.text_field :title_text %>
                </p>
                <p>
                    <%= f.label :description %> : <%= f.text_field :description %>
                </p>
                .
                .
                .
                .
                <p class="button"><%= f.submit "Create this product"  %></p>

    ====================================The End================================


Thanks.
于 2012-05-14T22:22:39.780 回答