【发布时间】: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