0

ruby、httparty、rest-client等有很多http请求工具,但大多只获取页面本身。是否有一种工具可以像浏览器一样获取页面的 html、javascript、css 和图像?

4

1 回答 1

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 文件,并且不消耗您或他们的所有带宽并让您被禁止或起诉。

随着任务的增长,您还必须考虑如何组织所有文件。将一页的资源存储在一个文件夹中是草率的,但这是一种简单的方法。将两个页面的资源存储在一个文件夹中会成为一个问题,因为您可能会遇到不同图像、脚本或 CSS 的文件名冲突。那时你必须使用多个文件夹,或者切换到使用数据库来跟踪资源的位置,并用唯一标识符重命名它们,然后将它们重写回你保存的 HTML,或者编写一个可以解决这些请求的应用程序和返回正确的内容。

于 2013-03-04T16:30:58.213 回答