如何使用 Curb 遍历 URL 数组

How to go through array of URLs using Curb

我需要解析此页面 https://www.petsonic.com/snacks-huesos-para-perros/ 并从每个项目(名称、价格、图像等)接收信息。问题是我不知道如何解析 URL 的数组。如果我使用 'open-uri' 我会做这样的事情

require 'nokogiri'
require 'open-uri'


page="https://www.petsonic.com/snacks-huesos-para-perros/"


doc=Nokogiri::HTML(open(page))
links=doc.xpath('//a[@class="product-name"]/@href')

links.to_a.each do|url|
  doc2=Nokogiri::HTML(open(url))
  text=doc2.xpath('//a[@class="product-name"]').text
  puts text
end

但是,我只被允许使用 'Curb',这让我很困惑

您可以使用 curb gem

gem install curb

然后在你的ruby脚本中

require 'curb'
page = "https://www.petsonic.com/snacks-huesos-para-perros/"
str = Curl.get(page).body
links = str.scan(/<a(.*?)<\/a\>/).flatten.select{|l| l[/class\=\"product-name/]}
inner_text_of_links = links.map{|l| l[/(?<=>).*/]}
puts inner_text_of_links

其中最难的部分是正则表达式,让我们对其进行分解。要获取链接,我们只需扫描 <a> 标签的字符串,然后将它们放入一个数组并将它们展平为一个数组。

str.scan(/<a(.*?)<\/a\>/)

然后我们 select 匹配我们模式的项目。我们正在寻找您指定的 class。

.select{|l| l[/class\=\"product-name/]}

现在要获取标签的内部文本,我们只需使用正则表达式进行映射

inner_text_of_links = links.map{|l| l[/(?<=>).*/]}