2013-06-05 69 views
0

我需要从给定网站的URL中的所有背景图片在Rails脚本解析为网站

我与引入nokogiri尝试过的背景图像的URL的外部CSS:

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 Scrapper从提供的网站获取所有背景图像。

我该如何做到这一点?

+1

这是一个愚蠢的http://stackoverflow.com/questions/16917542/extract-background-image-from-an-html-element-in-ruby? – orde

+0

你不能用Nokogiri做到这一点。您需要Watir或Selenium或其他Ruby控制浏览器。有关更多详细信息,请参见[类似的问题](http://stackoverflow.com/questions/16917542/extract-background-image-from-an-html-element-in-ruby)。 – Phrogz

+0

感谢您的回复。@还有一个类似的问题和更详细的说明。 –

回答

1

做这样的事情来获取背景图像数组与该图像所属的标签,类或id的名称。

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

,并创建将处理样式和回报和2D阵列与标签,名称或ID和路径于该图像的私有方法。

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花的背景图像属性,并将其追加到与类名的数组。