Webブラウザー(IEまたはChrome)を使用して、Ctl-SでWebページ(.html)を保存し、テキストエディターで検査して、表形式のデータを表示できます。それらの数字の1つを抽出したいのですが、多くの多くのWebページでは、手動で行うには多すぎます。そこで、WGETを使用してこれらのWebページを次々に取得し、別のプログラムを作成して.htmlを解析し、必要な数を取得したいと思います。ただし、ブラウザと同じURLを使用しているときにWGETによって保存された.htmlファイルには、データテーブルが含まれていません。何故なの?サーバーが、WebブラウザからではなくWGETからのリクエストを検出し、データテーブルのないスケルトンWebページを提供するかのようです。 WGETでまったく同じWebページを取得するにはどうすればよいですか? - どうも!
詳細:
取得しようとしているURLの例は次のとおりです。 http://performance.morningstar.com/fund/performance-return.action?t=ICENX®ion=usa&culture=en-US ICENXは投資信託のティッカーシンボルであり、これをさまざまなティッカーシンボルのいずれかに変更します。これにより、ブラウザーで表示したときにデータのテーブルがダウンロードされますが、WGETでフェッチした場合、データテーブルは失われます。
roadmr のように、このページの表はjavascriptによって生成されます。 wgetはjavascriptをサポートしていません。サーバーから受信したとおりに(つまり、javascriptコードが実行される前に)ページをダンプするだけなので、テーブルがありません。
phantomjs のようなjavascriptをサポートするヘッドレスブラウザが必要です。
$ phantomjs save_page.js http://example.com > page.html
save_page.jsを使用:
var system = require('system');
var page = require('webpage').create();
page.open(system.args[1], function()
{
console.log(page.content);
phantom.exit();
});
次に、単にテキストを抽出したい場合、最も簡単なのはw3mでページをレンダリングすることです。
$ w3m -dump page.html
および/またはphantomjsスクリプトを変更して、興味のあるものだけをダンプします。
wget --mirror
を使用して完全なWebサイトをダウンロードできます
例:
wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL
完全なWebサイトをダウンロードし、ローカルで表示できるようにする場合に実行する上記のコマンドライン。
オプション:
--mirror
は、ミラーリングに適したオプションをオンにします。
-p
は、特定のHTMLページを適切に表示するために必要なすべてのファイルをダウンロードします。
--convert-links
ダウンロード後、ドキュメント内のリンクをローカル表示用に変換します。
-P ./LOCAL-DIR
は、すべてのファイルとディレクトリを指定されたディレクトリに保存します。
Wgetオプションの詳細については、こちらの記事を参照してください。 すべてのwgetコマンドの概要と例 、または Wgetのmanページ を確認してください。
--recursive
の代わりに、URLのすべてのリンクを「スパイダー」して、--page-requisites
を使用します。グラフィカルブラウザで記述するオプションとまったく同じように動作する必要があります。
This option causes Wget to download all the files that are
necessary to properly display a given HTML page. This includes
such things as inlined images, sounds, and referenced stylesheets.
Ordinarily, when downloading a single HTML page, any requisite
documents that may be needed to display it properly are not
downloaded. Using -r together with -l can help, but since Wget
does not ordinarily distinguish between external and inlined
documents, one is generally left with "leaf documents" that are
missing their requisites.
詳細については、man wget
を実行し、--page-requisites
オプションを探してください(manページを読んでいるときに検索するには「/」を使用します)。
サーバーの回答が質問元によって異なる場合、それは主に、質問元からのリクエストで提供されるHTTP_USER_AGENT変数(テキスト文字列のみ)が原因であり、サーバーにテクノロジーについて通知します。
ここでブラウザエージェントを確認できます-> http://whatsmyuseragent.com
WGETマニュアルによると、このパラメーターは--user-agent=AGENT
の仕事をするはずです。
これが役に立たない場合、つまり、ブラウザーと同じページを取得するためにJavaScript処理が必要になる場合があります。または、ページを埋めるためにJavaScriptを必要としない回答をサーバーが準備するために、GETパラメーターを使用して適切な要求が必要になる場合があります。
--recursive
パラメーターがあります。それはすべてをダウンロードし、時にはあなたが望むものよりも多くをダウンロードします。
wget --recursive http://url.com