“保存带依赖关系的页面”(与Nokogiri一起?)

时间:2012-06-06 10:18:15

标签: ruby rubygems nokogiri

我想在ruby中开发一个“页面下载器” - 给定一个url,将下载html,相关的css,imagefiles和javascripts,然后更改html以引用本地副本而不是远程那些。就像有些浏览器使用“另存为完整页面”选项一样。

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

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

有没有宝石可以做我想要的?

2 个答案:

答案 0 :(得分: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) }

    此外,您将获得的所有网址都可能与当前网址相关,因此您需要resolve relative URLs

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

答案 1 :(得分:0)

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