0

我需要从 Rails 脚本中的给定网站 URL 获取所有背景图像

我试过 Nokogiri:

doc = Nokogiri::HTML(open(url)) // url - will be any website

这是网站的 HTML 和 CSS:

<h1 class="logo">
  <a href="/">Website Name</a>
</h1>

.logo {
  width: 193px;
  height: 73px;
  float: left;
  background: url(/themes/site_themes/tccc/images/logo.png) no-repeat;
}

我想要实现的是从外部文件中检索徽标背景图像 URL。我们可以使用 Nokogiri 检索内联样式,但我一直无法找到外部样式的解决方案。

我想使用任何 Web scraper从提供的网站获取所有背景图像。

我怎样才能做到这一点?

4

1 回答 1

3

做这样的事情来获取背景图像数组,其中包含该图像所属的标签、类或 ID 的名称。

document = Nokogiri::HTML(open(path_to_html_file)
background_images = search_in_css(document.css('style'))

并创建一个私有方法,该方法将处理样式和返回以及带有标签、名称或 id 以及该图像路径的 2D 数组。

private
  def search_in_css(styles)
    background_images = Array.new
    if styles.count > 0
      styles.each do |style|
        style.children.each do |prop|
          string = prop.to_s.delete("\n").delete("\t").delete(' ').gsub('"', "'")
          each_klass = string.split("}")
          each_klass.each do |el|
            arr = el.split("{")
            klass_name = "css_" + arr[0]
            image_url = arr[1][/background-image\:url\((.*?)\)\;/m, 1].delete("'")
            background_images << [ klass_name, image_url ]
          end
        end
      end
    end

    return background_images.uniq
  end

此方法将遍历每一行,仅将获取的 CSS 的 background-image 属性并将其附加到具有该类名称的数组中。

于 2016-12-30T17:54:54.643 回答