1

ルビーで「ページダウンローダー」を開発したいと思います。URLを指定すると、html、関連するcss、imagefiles、javascriptsをダウンロードし、リモートコピーではなくローカルコピーを参照するようにhtmlを変更します。一部のブラウザが「完全なページとして保存」オプションを使用するのと同じように。

ページの最初の解析を行うためにNokogiriを使用することを考えていました。しかし、それがその仕事に最適なツールかどうかはわかりません。

  • 外部の依存関係(スタイルシート、画像、JavaScript)のリストを取得できますか?javascriptで生成された依存関係は気にしません。
  • CSSを解析しますか?画像や@importedcssファイルもダウンロードしたいと思うかもしれません。

私がやりたいことをすでにやっている宝石はありますか?

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をページに適用できません。Webブラウザではありません。

于 2012-06-06T21:11:16.600 に答える
0

私が欲しかったものはまだ実装されていないようです。Nokogiriを使用してhtmlを解析できます。また、CSSを解析できる他のgem(css_parserなど)もありますが、私は個人的には使用していません。おそらく、最新のcss(メディアクエリ、インポートなど)で問題が発生する可能性があります。 )。

于 2012-07-13T20:53:06.887 に答える