如何使用 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[/(?<=>).*/]}
我需要解析此页面 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[/(?<=>).*/]}