ruby や httparty、rest-client などには多くの http リクエスト ツールがありますが、それらのほとんどはページ自体を取得するだけです。ブラウザと同じように、ページの html、javascript、css、および画像を取得するツールはありますか?
1 に答える
アネモネが思い浮かびますが、それは単一のページを実行するようには設計されていません。ただし、設定する時間があれば可能です。
HTMLパーサーであるNokogiriのようなものを使用してページのコンテンツを取得することは難しくありません。関心のあるタグを繰り返し処理し、それらの「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ファイルに従い、すべての帯域幅またはその帯域幅を消費して禁止または訴えられないようにするのに十分スマートな完全なサイトスパイダーを作成する必要があります。
タスクが大きくなるにつれて、すべてのファイルをどのように整理するかについても考慮する必要があります。1つのページのリソースを1つのフォルダーに保存するのは面倒ですが、それを行う簡単な方法です。異なる画像やスクリプト、またはCSSでファイル名の衝突が発生する可能性があるため、1つのフォルダに2ページのリソースを保存すると問題が発生します。その時点で、複数のフォルダーを使用するか、データベースを使用してリソースの場所を追跡し、それらの名前を一意の識別子に変更して、保存したHTMLに書き直すか、これらのリクエストを解決できるアプリを作成する必要があります。正しいコンテンツを返します。