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


34

Webブラウザー(IEまたはChrome)を使用して、Ctl-SでWebページ(.html)を保存し、テキストエディターで検査して、表形式のデータを表示できます。これらの数字の1つを抽出したいのですが、多くの多くのWebページでは、手動で行うには多すぎます。そこで、WGETを使用してこれらのWebページを次々に取得し、別のプログラムを作成して.htmlを解析し、必要な数を取得したいと思います。ただし、ブラウザと同じURLを使用しているときにWGETによって保存された.htmlファイルには、データテーブルが含まれていません。何故なの?サーバーが、WebブラウザからではなくWGETからのリクエストを検出し、データテーブルのないスケルトンWebページを提供するかのようです。WGETでまったく同じWebページを取得するにはどうすればよいですか?- THX!

詳細:

私はフェッチしようとしているURLの例は次のとおりです。 http://performance.morningstar.com/fund/performance-return.action?t=ICENX®ion=usa&culture=en-US 文字列ICENXは、投資信託のティッカーシンボルであるところを、さまざまなティッカーシンボルのいずれかに変更します。これにより、ブラウザーで表示したときにデータのテーブルがダウンロードされますが、WGETでフェッチした場合、データテーブルは失われます。


どのURLですか?
Braiam

2
ほとんどの場合、最初のHTMLは、テーブルをダウンロードして入力するjavascriptフラグメントによってAJAXテクニックを使用して入力されます。この場合、このスクリプトの呼び出しを取得するのはおそらく幸運でしょう。Braiamが尋ねるように、あなたがURLを提供すれば、私たちはこれをよりよく理解するのを助けることができるかもしれません。
roadmr

1
ad詳細:ブラウザでソースコードを表示すると、元のHTML(wgetで取得したものと同じ)は表示されませんが、javascript / ajaxによって更新されたHTMLが表示されます。最新のブラウザは、プレーンHTMLの代わりにこのような生成されたソースを表示します。
Vrata Blazek

回答:


39

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


これも機能しません。たとえば、cotrino.com / lifespan
mrgloom

リンクにそれと文句を言わない仕事を生成JS
QkiZ

1
2018:PhantomJSプロジェクトは、追って通知があるまで中断されます:(
1rq3fea324wre

このソリューションは、指定されたURLからページをダウンロードする場合のみです。wgetのサイトクロールメカニズムをどのようにパイプしますか?また、ヘッドレスクロームではスクリプトはどのようになりますか?
フィル

10

を使用して完全なWebサイトをダウンロードできます。 wget --mirror

例:

wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL

完全なWebサイトをダウンロードし、ローカルで表示できるようにする場合に実行する上記のコマンドライン。

オプション:

  • --mirror ミラーリングに適したオプションをオンにします。

  • -p 特定のHTMLページを適切に表示するために必要なすべてのファイルをダウンロードします。

  • --convert-links ダウンロード後、ドキュメント内のリンクをローカル表示用に変換します。

  • -P ./LOCAL-DIR すべてのファイルとディレクトリを指定されたディレクトリに保存します。

Wgetオプションの詳細については、この記事の続きをご覧ください: 例付きのすべてのwgetコマンドについて、またはWgetのmanページを確認してください


2
これは、JavaScriptでレンダリングされたコンテンツでは機能しません。そのためには、lemonsqueezeの回答どおりにphantomjsを使用する必要があります。
マティアス

1
このcmdはすべてのサブURLも調べます。これにより、指定されたWebページのレンダリングに必要のないリソースがダウンロードされます。
1rq3fea324wre

3

の代わりに--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ページを読みながら検索するには「/」を使用します)。


2

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


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

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


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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.