web-dev-qa-db-ja.com

ブラウザとまったく同じWebページhtmlをダウンロードするためにWGETを取得する方法

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&region=usa&culture=en-US ICENXは投資信託のティッカーシンボルであり、これをさまざまなティッカーシンボルのいずれかに変更します。これにより、ブラウザーで表示したときにデータのテーブルがダウンロードされますが、WGETでフェッチした場合、データテーブルは失われます。

33
user239598

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スクリプトを変更して、興味のあるものだけをダンプします。

39
lemonsqueeze

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ページ を確認してください。

10
GowriShankar

--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ページを読んでいるときに検索するには「/」を使用します)。

3
roadmr

サーバーの回答が質問元によって異なる場合、それは主に、質問元からのリクエストで提供されるHTTP_USER_AGENT変数(テキスト文字列のみ)が原因であり、サーバーにテクノロジーについて通知します。


  1. ここでブラウザエージェントを確認できます-> http://whatsmyuseragent.com

  2. WGETマニュアルによると、このパラメーターは--user-agent=AGENTの仕事をするはずです。


これが役に立たない場合、つまり、ブラウザーと同じページを取得するためにJavaScript処理が必要になる場合があります。または、ページを埋めるためにJavaScriptを必要としない回答をサーバーが準備するために、GETパラメーターを使用して適切な要求が必要になる場合があります。

2
Esamo

--recursiveパラメーターがあります。それはすべてをダウンロードし、時にはあなたが望むものよりも多くをダウンロードします。

wget --recursive http://url.com
0
Braiam