2013-05-02 30 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。其中一个可能做你想做的。

相关问题