簡體   English   中英

使用Ruby從URL中提取數據

[英]Extract data from URL with Ruby

我是ruby的新手,我正在嘗試使用Ruby返回一個ASIN列表和相應的價格。 我能夠非常接近我需要的東西,但需要幫助才能回答2個問題:

  1. 如何擺脫ASIN周圍的[['> \\ n“]] (見下面的結果)
  2. 是否有一種更簡單的方法從URL中提取ASIN而不是使用此正則表達式?

非常感謝你的幫助!

這是我從當前代碼中獲得的終端:

[["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  

而不是清理你的Nokogiri搜索,此時最簡單的方法就是在插值過程中清理當前的asin值。 例如:

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

關於問題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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM