1

我想在 ruby​​ 中开发一个“页面下载器”——给定一个 url,它会下载 html、相关的 css、图像文件和 javascript,然后更改 html 以引用本地副本而不是远程副本。就像某些浏览器使用“另存为完整页面”选项一样。

我正在考虑使用 Nokogiri 进行页面的初始解析。但我不确定它是否是这项工作的最佳工具:

  • 它可以获取外部依赖项(样式表、图像和 javascript)的列表吗?我不关心 javascript 生成的依赖项。
  • 它会解析 CSS 吗?我可能也想下载图像或@imported css 文件。

是否有一颗宝石已经可以满足我的要求?

4

2 回答 2

1
  1. 不,Nokogiri 不知道外部依赖项。您可以执行以下操作:

    js_urls  = doc.xpath('//script/@src').map(&:content)
    css_urls = doc.xpath('//link/@href').map(&:content)
    img_urls = doc.xpath('//img/@src').map(&:content)
    

    ……但这不会找到:

    • 由 JavaScript 动态加载的脚本或 CSS(创建元素并将它们附加到文档
      中)你说你不关心
    • JavaScript 请求的图像,例如var img = new Image; img.src="...";
      你说你不关心的图像
    • 从 CSS 链接的 CSS,例如@import url(foo.css);
    • CSS 引用的图像,例如#nav { background:url(/images/navhead.png) }
       

    此外,您将返回的所有 URL 都可能与当前 URL 相关,因此您需要解析相对 URL

  2. 不,Nokogiri 是一个 X/HTML DOM 库(位于 libxml2 之上)。它不解析 JavaScript,不执行 JavaScript,不解析 CSS,也不能将 CSS 应用到页面。它不是网络浏览器。

于 2012-06-06T21:11:16.600 回答
0

看来我想要的还没有实现。Nokogiri 可用于解析 html,还有其他可以解析 CSS 的 gem(即 css_parser),但我个人没有使用过它们,它们可能会遇到现代 css 的问题(媒体查询、导入等) )。

于 2012-07-13T20:53:06.887 回答