解析外部css为网站的背景图像网址

时间:2013-06-05 13:03:36

标签: html ruby-on-rails ruby nokogiri

我需要在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;
}

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

我希望使用任何Web Scrapper从所提供的网站获取所有背景图片。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

做这样的事情来获得一个背景图像数组,其中包含该图像所属的标记,类或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属性放入,并将其附加到具有该类名称的数组中。