4

Python3 を使用して、Javascript を使用して Web スクレイピング Web ページで乱闘に参加するところまで来ました。ブーツが死んだ馬と接触している可能性があることは十分承知していますが、とにかくシックスシューターを引きたいと思っています。それはスパゲッティウエスタンです。私の灰色の帽子ですか?

::裏話::

Python 3.2.3 を使用しています。

YTD、1 年、3 年、5 年、10 年 ... および/またはユーザー定義の株式、ETF、または投資信託。ログインを必要とせずにできるだけ多くのデータを提供する傾向があるため、私は自分のサイトを Morningstar.com に設定しました。Finance.google.com &c などの他の人々は、株式、ETF、ミューチュアル ファンドに関して提供するデータに一貫性がない傾向があります。

この履歴データ、または「Trailing Total Returns」と呼ばれるモーニングスターを使用する際のトレードオフは、このデータを生成するために Javascript を使用することです。

以下は、モーニングスターからのリンクの例です。

投資信託;

ETF;

株式。

Javascript で生成されたグラフの「Trailing Returns」部分、一番上の行などに興味があります。

::これまでに試みた::

wget が Javascript で動作しないことを確認しました。関連ファイル [css、.js、&c] をすべてダウンロードしても、ブラウザまたはスクリプトで JavaScript をローカルにレンダリングすることはできません。ここでの StackOverflow の調査により、これが確認されました。ここで修正したいと思います。

私の調査によると、Mechanize は Python3 には存在しないことがわかりました。とにかくやってみたら、「やっぱり!」と叫びながら警官ジャベールになってしまった。エラーメッセージ「モジュールが存在しません」で。

::聞いたことあります...::

->セレン。ただし、Seleniumには「このタブ//ウィンドウを閉じる」コマンド//オプションがないため、これにはThy Favorite Browserが実際にWebページを開いてナビゲートし、閉じないことが必要であると理解しています. I//my_user が多数の ETF、株式、投資信託の履歴データを取得したい場合はどうすればよいですか? これは、ブラウザで開いている多くのタブ//ウィンドウであり、必ずしも開く必要はありません。

->httplib2. これはいいと思いますが、Javascript で動作するかどうかは疑問です。たとえば、.cache と get オプションを使用していますか?

import httplib2
conn = httplib2.Http(".cache")
page = conn.request(u"http://the_url","GET")

->風車。「セレン」を参照してください。しかし、私は「ラ・マンチャの男」を歌うほど調子が悪いです。

->Google のWeb スクレイピングコード。Javascript を使用したページをダウンロードしようとすると、... 肯定的な結果が得られるでしょうか?

「ブラウザなしでブラウザをエミュレートする」必要があるというおしゃべりを読んだことがあります。Mechanize のように聞こえますが、現在理解している Python3 向けではありません。

::私の質問::

提案、指針、解決策、または「こちらを見てください」という指示はありますか?

どうもありがとう、

マイルズ、砂塵砂漠の村人。

4

1 に答える 1

11

ページが JavaScript を介してデータをロードする場合、XMLHttpRequest 関数 (XHR) を介してそのデータを取得するようにサーバーに要求する必要があります。wget! を使用して、彼らが行っているリクエストを確認し、自分で作成することができます。

彼らが行っているリクエストを見つけるには、Web Inspector (Chrome および Safari) または Firebug (Firefox) を使用します。Chrome で行う方法は次のとおりです。

wrench/tools/developer tools/Network (ツールの上部にあるタブ)/下部にある XHR フィルター。

これは彼らがJavaScriptで行うリクエストの例です

XHR リクエストの URL をよく見ると、末尾のすべての戻り値が同じ形式になっていることがわかります。

http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=

を指定するだけですt。例えば:

http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=VAW http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=INTC http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=VHCOX

wgetこれらの URI を取得して、データを直接解析できるようになりました。

于 2012-08-03T23:26:26.313 に答える