Ruby 使用Nokogiri刮取多个页面
我正在编写一个Ruby CLI,其中我必须列出咖啡店,然后用户通过使用Nokogiri和open uri来选择一家来显示其信息。然而,这些信息来自他们各自的网页,包含这些信息 以下是我正在使用的网页: 以下是我需要从中获取信息的9个网页之一: 以下是我的代码,专门用于抓取其中一页:Ruby 使用Nokogiri刮取多个页面,ruby,command-line-interface,nokogiri,Ruby,Command Line Interface,Nokogiri,我正在编写一个Ruby CLI,其中我必须列出咖啡店,然后用户通过使用Nokogiri和open uri来选择一家来显示其信息。然而,这些信息来自他们各自的网页,包含这些信息 以下是我正在使用的网页: 以下是我需要从中获取信息的9个网页之一: 以下是我的代码,专门用于抓取其中一页: def self.scrape_shops url = "https://cincinnatiusa.com/article/9-hot-coffee-shops" doc = Nokogiri
def self.scrape_shops
url = "https://cincinnatiusa.com/article/9-hot-coffee-shops"
doc = Nokogiri::HTML(open(url))
shops = doc.css(".article-body h2").each do |shop|
name = shop.text.strip
BestCoffeeCinci::Shop.new(name)
end
end
def self.scrape_info
url = "https://cincinnatiusa.com/eat-and-drink/carabello-coffee"
doc = Nokogiri::HTML(open(url))
address = doc.css(".address").text
hours = doc.css(".hours").text
description = doc.css(".full-description").text
binding.pry
end
end
在使用不同的网页时,如何在不列出每个单独网页的情况下获取每个咖啡店的地址、营业时间和说明?谢谢 每个页面都有不同的结构,所以如果您希望这样做,您需要用更抽象的术语来定义它。例如,考虑使用YAML作为配置格式,正如@ TADMAN所写的那样,每个页面针对相同的信息实现不同的选择器。处理此问题的一种方法是编写一个
case
语句(在其他语言中称为switch
语句),在该语句中,您可以尝试
查找类似.address
的css选择器,如果未找到任何选择器,则可以尝试
查找其他选择器,直到找到匹配项。这不是特别高性能的代码,但它将允许您在将来干涸代码并扩展到其他站点。您可以使用yaml文件为每个页面进行配置,在这种情况下,您将为要提取的每个信息定义xpath。您的问题非常广泛。我们不知道你的专业水平,所以写一个清晰简洁的答案会导致写一篇教程,这是离题的。为做SEO的公司编写了大型爬行器,包括一个搜索财富50强公司网站套件的公司,它需要代码,可以在不关闭爬行器的情况下进行修改,允许在运行时进行动态重新配置,以便微调搜索并减少不良数据。这不容易在回答中解释。每个页面都有不同的结构,所以如果你想这样做,你需要用更抽象的术语来定义它。例如,考虑使用YAML作为配置格式,正如@ TADMAN所写的那样,每个页面针对相同的信息实现不同的选择器。处理此问题的一种方法是编写一个case
语句(在其他语言中称为switch
语句),在该语句中,您可以尝试
查找类似.address
的css选择器,如果未找到任何选择器,则可以尝试
查找其他选择器,直到找到匹配项。这不是特别高性能的代码,但它将允许您在将来干涸代码并扩展到其他站点。您可以使用yaml文件为每个页面进行配置,在这种情况下,您将为要提取的每个信息定义xpath。您的问题非常广泛。我们不知道你的专业水平,所以写一个清晰简洁的答案会导致写一篇教程,这是离题的。为做SEO的公司编写了大型爬行器,包括一个搜索财富50强公司网站套件的公司,它需要代码,可以在不关闭爬行器的情况下进行修改,允许在运行时进行动态重新配置,以便微调搜索并减少不良数据。这在回答中不容易解释。