2013-06-05 97 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花的背景圖像屬性,並將其追加到與類名的數組。