2014-10-29 69 views
1

我是ruby的新手,我尝试使用Ruby返回ASIN和相应价格的列表。我是能够得到相当接近我所需要的,但需要帮助回答2个问题:从Ruby中提取URL的数据

  1. 我怎样才能摆脱[”> \ n“]]围绕ASIN (见下面的结果)
  2. 有从URL中提取ASIN不是使用这个正则表达式更简单的方法?

非常感谢您的帮助!

以下是我在终点站下车从T他当前的代码:

[["B00EJDIG8M\n"]] - $7.00 
[["B00KJ07SEM\n"]] - $26.99 
[["B000FAR33M\n"]] - $119.00 
[["B00LLMKPVK\n"]] - $22.99 
[["B007NXPAQG\n"]] - $9.47 
[["B004W5WAMU\n"]] - $22.43 
[["B00LFUNGU0\n"]] - $17.99 
[["B0052G14E8\n"]] - $54.99 
[["B002MPLYEW\n"]] - $212.99 
[["B00009W3G7\n"]] - $6.61 
[["B000NCTOUM\n"]] - $3.04 
[["B009SANIDO\n"]] - $12.29 
[["B0052G51AQ\n"]] - $67.99 
[["B003XEUEPQ\n"]] - $26.74 
[["B00CYH9HRO\n"]] - $25.75 
[["B00KV0SKQK\n"]] - $21.99 
[["B009PCI2JU\n"]] - $56.66 
[["B00LLM6ZFK\n"]] - $24.99 
[["B004RQDY60\n"]] - $18.40 
[["B000JLNBW4\n"]] - $49.14 

下面是代码:

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 
PAGE_URL = "http://www.amazon.com/Best-Sellers-Appliances/zgbs/appliances/ref=zg_bs_nav_0" 

page = Nokogiri::HTML(open(PAGE_URL)) 
page.css(".zg_itemWrapper").each do |item| 
    price = item.at_css(".zg_price .price").text 
    asin = item.at_css(".zg_title a")[:href].scan(/http:\/\/(?:www\.|)amazon\.com\/(?:gp\/product|[^\/]+\/dp|dp)\/([^\/]+)/) 
    puts "#{asin} - #{price}" 
end 
+0

你看到的是一个双重嵌套阵列与一个字符串。如果他们出现在你的输出中,可能是因为你如何从结果中刮掉它们。例如,'scan'像这样返回数组。 – tadman 2014-10-29 05:42:24

回答

3

而不是清理你引入nokogiri搜索,在这一点上做的过程中,只是清理你的当前ASIN值的最容易的事插值。例如:

puts "#{asin.flatten.pop.chomp} - #{price}" 
+0

'asin.join.chomp'也可以做到这一点。 – tadman 2014-10-29 05:41:04

0

对于问题2,我意识到,我并不真的需要正则表达式,并找到一种方法,用代码

更短的行得到同样的结果替换

asin = item.at_css(".zg_title a")[:href].scan(/http:\/\/(?:www\.|)amazon\.com\/(?:gp\/product|[^\/]+\/dp|dp)\/([^\/]+)/) 

asin = item.at_css(".zg_title a")[:href].split("/")[5].chomp