2013-05-02 31 views
0

這是我的理解是,當我做:有沒有簡單的方法讓Mechanize獲取網頁的所有組件?

agent = Mechanize.New 
page = agent.get("http://www.stackoverflow.com/") 

機械化將使該text/htmlHTTPGET請求。但是,當我在完整的Web瀏覽器(如Chrome/Firefox)中導航到諸如Stackoverflow.com之類的網頁時,瀏覽器會讀取HTML頁面,並隨後發出GET請求關聯的CSS,圖像,JavaScript等。

我可以想象解析由Mechanize返回的初始HTML,並識別任何CSS,圖像等,並進行後續請求,但有沒有一種簡單的方法讓Mechanize自動抓取所有或指定的組,也許只是關聯的圖像網頁的組件?

+1

爲了給出一個有用的答案,最好知道你的最終目標是什麼。你究竟在努力完成什麼? – 2013-05-02 19:26:48

+0

一個目標是從Web服務器的角度來看,機械化_look_和_behave_更像是一個完整的Web瀏覽器。 – Stephen 2013-05-02 22:41:25

+1

然後,你應該看看像phantomjs一樣的無頭瀏覽器! – 2013-05-02 23:28:01

回答

1

不,機械化不會那樣做。此外,機械化檢索它無法解析的非文本內容的重點是什麼?

相反,找出你想要的部分,並使用Net::HTTPCurbOpen-URITyphoeus,或任何其他基於HTTP的工具來獲取內容,並將其保存到磁盤。實際上,除非我需要機械化首先瀏覽某些表單,或者保持會話,否則我會編寫一個使用Nokogiri抽出所需元素的小Ruby腳本。如果你必須使用Mechanize進行初始導航,它會自動加載Nokogiri來處理它的DOM解析,所以你可以在它可以給你的Mechanize頁面上繼承,它是一個Nokogiri :: HTML文檔。通過右側的相關鏈接搜索以獲取更多信息。

+2

我可以想到很多理由在所有提到的庫上使用機械化。需要會議是最明顯的會議。 – pguardiario 2013-05-02 22:50:25

+0

是的,保持會話是使用機械化的另一個原因。如果一個網站不需要那些,我不會拉入機械化。 – 2013-05-03 14:49:11

+0

我會的。機械化是我可以始終依靠的工作。 – pguardiario 2013-05-04 00:23:49

1

我會看看可用的Mechanize::PluggableParser。其中一個可能做你想做的。

相關問題