2013-03-04 37 views
0

在ruby,httparty,rest-client等中有很多http請求工具,但其中大多數只獲取頁面本身。有沒有一種工具可以像瀏覽器一樣獲取頁面的html,javascript,css和圖片?如何在ruby中獲取頁面的所有資源

+0

此頁面是本地的到您的應用程序,還是野外? – 2013-03-04 16:03:30

+2

目的是什麼?換句話說,你想要做什麼,以及爲什麼是Ruby?像wget這樣的東西可能會滿足您的需求,這取決於您的實際需求。否則,這是一個遞歸問題,或使用瀏覽器驅動程序或無頭瀏覽器。它還取決於您是否需要運行JavaScript,例如用於動態加載的內容。 – 2013-03-04 16:04:35

+0

這很明顯,目的是從網站下載整個頁面。由於大多數頁面充斥着版權保護的材料,因此意圖更難以理解,但OP所做的就是業務。 – 2013-03-04 16:16:08

回答

0

Anemone想到了,但它不是爲了做一個單一的頁面而設計的。如果你有時間設置它,它是有能力的。

使用像Nokogiri這樣的HTML解析器來檢索頁面的內容並不困難。您可以迭代感興趣的標籤,獲取其「SRC」或「HREF」參數並請求這些文件,將其內容存儲在磁盤上。

一個簡單的,未經檢驗和書面上的即時,例如使用引入nokogiri和OpenURI是:

require 'nokogiri' 
require 'open-uri' 

html = open('http://www.example.com').read 
File.write('www.example.com.html', html) 
page = Nokogiri::HTML(html) 
page.search('img').each do |img| 
    File.open(img['src'], 'wb') { |fo| fo.write open(img['src']).read } 
end 

獲取CSS和JavaScript是有點難度,因爲你必須確定他們是否被嵌入在頁面或資源中,需要從其來源中檢索。

僅僅下載HTML和內容很容易。創建獨立版本的頁面並從本地緩存讀取內容要困難得多。您必須重寫所有「SRC」和「HREF」參數以指向磁盤上的文件。

如果您希望能夠在本地緩存站點,那更糟的是,因爲您必須重新調整頁面中的所有錨點和鏈接以指向本地緩存。此外,你必須編寫一個完整的網站蜘蛛,它足夠聰明,可以呆在網站內,不會遵循多餘的鏈接,服從網站的ROBOTS文件,並且不會消耗你的所有帶寬或者他們的帶寬,並且被禁止或被起訴。

隨着任務的增長,您還必須考慮如何組織所有文件。將一個頁面的資源存儲在一個文件夾中是sl,but but的,但卻是簡單的方法。在一個文件夾中將兩頁資源存儲成爲一個問題,因爲您可以爲不同的圖像或腳本或CSS產生文件名衝突。此時,您必須使用多個文件夾,或者切換到使用數據庫來跟蹤資源的位置,並使用唯一標識符重命名它們,並將它們重寫回保存的HTML,或編寫一個可以解決這些請求的應用程序,以及返回正確的內容。

相關問題