【问题标题】:Why do I get a `syntax error, unexpected tCONSTANT, expecting keyword_end`?为什么我会收到“语法错误,意外 tCONSTANT,期待关键字结束”?
【发布时间】:2014-07-28 23:14:36
【问题描述】:

我想在某个网店查看某个产品的价格。

我正在使用一个常量来存储网店数据的哈希,因此编辑更容易(将添加更多商店)。

这是我正在使用的代码:

require 'httparty'
require 'nokogiri'

class Prijscheckr

  STORES = {
    :zara => {
      'base_uri' => 'http://www.zara.com/nl/',
      'normal_price_css' => 'p.price > span',
      'css_normal_price_extract' => "[0].attr('data-price')",
      'normal_price_xpath' => '/p[3]/span',
      'xpath_normal_price_extract' => "[0].attr('data-price')"
    }
  }

  def begin(args = {})
    page = Nokogiri::HTML(HTTParty.get(args[:url]))

    price = page.css(STORES[:zara]['normal_price_css'])STORES[:zara]['css_normal_price_extract']
  end
end

什么时候做

p = Prijscheckr.new

p.begin(url: 'http://www.zara.com/nl/nl/collectie-aw14/dames/jacks/leren-bikerjack-c269184p2137577.html')

结果如下:

    # Works
    # price = page.css('p.price > span')[0].attr('data-price')

    # Works
    # price = page.css(STORES[:zara]['normal_price_css'])[0].attr('data-price')

    # Does not work
    # price = page.css(STORES[:zara]['normal_price_css'])STORES[:zara]['css_normal_price_extract']

如何连接price = page.css(STORES[:zara]['normal_price_css'])STORES[:zara]['css_normal_price_extract']而不在方法中硬编码?

【问题讨论】:

  • 你不能像这样连接字符串来形成 ruby​​ 代码。
  • 如何在不对方法中的 css 路径进行硬编码的情况下将其连接起来?
  • 一件事.. 你的方法名begin 是Ruby 中的保留关键字。所以把名字改成别的,或者写成_begin

标签: ruby hash constants nokogiri httparty


【解决方案1】:

Ruby 代码不能通过字符串连接创建。您可能想将css_normal_price_extract 声明为一个lamba

'css_normal_price_extract' => ->(val) {val[0].attr('data-price')}

price = STORES[:zara]['css_normal_price_extract'].call(page.css(STORES[:zara]['normal_price_css']))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多