2010-11-18 5 views
4

これまでに試したことがあります。私は完全にアイデアを失っています。Pythonで価格をダウンロード

このページでは、引用符を付けるこのダイアログボックスです。 http://www.schwab.com/public/schwab/non_navigable/marketing/email/get_quote.html

Iは、出力テーブルと上記でSPY、XLV、IBM、MSFT

を用います。

アカウントをお持ちの場合は、クォートを介してリアルタイムで見積もりが行われます。

テーブルをPython 2.6にするにはどうしたらいいですか?リストまたは辞書としてのデータ

答えて

4

最初の問題:データは、フレーム内のiframeに実際にあります。 https://www.schwab.wallst.com/public/research/stocks/summary.asp?user_id=schwabpublic&symbol=APC(URLの末尾にある適切な記号で置き換えます)を調べる必要があります。

第2の問題:ページからデータを抽出する。私は個人的にlxmlとxpathが好きですが、仕事をするパッケージがたくさんあります。 - に言って、このページのマークアップは、構造、プレゼンテーションではありません。

print repr(getStockData('MSFT')) 

として呼び出された場合、私はおそらくそれが

{'stock_name': 'Microsoft Corp', 'last_price': 25.690000000000001, 'stock_symbol': 'MSFT:NASDAQ'} 

第三の問題点を返し

import urllib2 
import lxml.html 
import re 
re_dollars = '\$?\s*(\d+\.\d{2})' 

def urlExtractData(url, defs): 
    """ 
    Get html from url, parse according to defs, return as dictionary 

    defs is a list of tuples ("name", "xpath", "regex", fn) 
     name becomes the key in the returned dictionary 
     xpath is used to extract a string from the page 
     regex further processes the string (skipped if None) 
     fn casts the string to the desired type (skipped if None) 
    """ 

    page = urllib2.urlopen(url) # can modify this to include your cookies 
    tree = lxml.html.parse(page) 

    res = {} 
    for name,path,reg,fn in defs: 
     txt = tree.xpath(path)[0] 

     if reg != None: 
      match = re.search(reg,txt) 
      txt = match.group(1) 

     if fn != None: 
      txt = fn(txt) 

     res[name] = txt 

    return res 

def getStockData(code): 
    url = 'https://www.schwab.wallst.com/public/research/stocks/summary.asp?user_id=schwabpublic&symbol=' + code 
    defs = [ 
     ("stock_name", '//span[@class="header1"]/text()', None, str), 
     ("stock_symbol", '//span[@class="header2"]/text()', None, str), 
     ("last_price", '//span[@class="neu"]/text()', re_dollars, float) 
     # etc 
    ] 
    return urlExtractData(url, defs) 

のようないくつかのコードを期待します私はそれに基づいてコードは、おそらく壊れやすいだろう、つまり、ページの構造(またはページ間のバリエーション)の変更は、あなたのxpathsを再加工する必要があります。

希望に役立ちます!

+0

@hugh私はそのページからデータを取得したいと思います。次に、新しい発見スキルと他のページのコードを使用して、アイデアをありがとう。そこにはそのページに触れる方法があります。 authenationを追加し、リアルタイムデータを取得します。私は提示されたデータだけが必要です。 sybmol list 50+ ....もう一度、あなたの努力に非常に感謝します。私はそのページに触れる方法を学ぶ必要があります...... – Merlin

+0

完全に壊れてしまったので、lxmlを使い始めました。 – Merlin

+0

@ user428862:どのように「完全に壊れていますか?上記のコードはまだ私のために働くようです。 –

5

ウェブサイトからのHTML応答を解析して辞書にロードするには、美しいスープのようなものを使用します。シンボルをキーとして使用し、値として関心のあるデータのタプルを使用します。返されたすべてのシンボルを繰り返し、シンボルごとに1つのエントリを追加します。

Toby Segaranの「Programming Collective Intelligence」で、これを行う方法の例を見ることができます。サンプルはすべてPythonで書かれています。

+0

ありがとう、私はこの情報源を知りませんでした。あなたは本のどこに、私の話題が扱われているか知っていますか?私はこれのノブです。 – Merlin

+0

上記のUrlで美味しいスープを使用するにはどうすればいいですか?任意のコード? – Merlin

+0

第3章:グループの検索を参照してください。 – duffymo

3

yahooの引用符apiを使用することを考えましたか?
http://query.yahooapis.com/v1/public/yql?q=select%20
を参照してください:あなたは、動的などのウェブサイトへの要求を生成することができるようになりますhttp://developer.yahoo.com/yql/console/?q=show%20tables&env=store://datatables.org/alltableswithkeys#h=select%20 *%20from%20yahoo.finance.quotes%20where%20symbol%20%3D%20%22YHOO%22

*%20from%20yahoo.finance.quotes%20where%20symbol%20%3D%20%22YHOO%22の&診断=真& ENV =店舗%3A%2F%2Fdatatables.org%2Falltableswithkeys

そして、ちょうどでそれをポーリングhttp GETリクエストを標準化します。応答はXML形式です。

+0

私はYahooのデータを持っていて稼働しています。私はテーブルにcvs download parseを使用します。私はHttp GetとXMLフォーマットに熟練していません。 – Merlin

+0

http getは、ブラウザで行う標準のhttp要求です。 httplib2、オブジェクトhttp.request(the_url、 "GET")を使用すると、xmlを解析して応答します。これとXMLを使用するにはスキルは必要ありませんが、ウェブのabcを知りたい場合は、それを見てみるべきでしょう。 XMLは単なるテキストなので、それを解析して、必要な情報を論理オブジェクトとジョブにマップします。 –

0

matplotlibのヤフーから過去引用符を取得するモジュールを有する。

>>> from matplotlib.finance import quotes_historical_yahoo 
>>> from datetime import date 
>>> from pprint import pprint 
>>> pprint(quotes_historical_yahoo('IBM', date(2010, 11, 12), date(2010, 11, 18))) 
[(734088.0, 
    144.59, 
    143.74000000000001, 
    145.77000000000001, 
    143.55000000000001, 
    4731500.0), 
(734091.0, 
    143.88999999999999, 
    143.63999999999999, 
    144.75, 
    143.27000000000001, 
    3827700.0), 
(734092.0, 
    142.93000000000001, 
    142.24000000000001, 
    143.38, 
    141.18000000000001, 
    6342100.0), 
(734093.0, 
    142.49000000000001, 
    141.94999999999999, 
    142.49000000000001, 
    141.38999999999999, 
    4785900.0)] 
+0

本当に、ブローカーからデータを取得しようとしています。私は日中の価格が必要です。 – Merlin