-1

我在 python3 中有一个脚本,可以在 windows 和 osx 上运行,但它在显示 1 个图表后挂起。我也想知道我是否可以让雅虎上的抓取过程更快。

http://pastebin.com/BeDVkA05

import time
import urllib
import urllib.request
import Quandl
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

def yahooKeyStats(stock):
try:
    sourceCode = urllib.request.urlopen('http://au.finance.yahoo.com/q/ks?s='+stock).read()
    pbr = str(sourceCode).split('Price/Book (mrq):</td><td class="yfnc_tabledata1">')[1].split('</td>')[0]

    if float(pbr) < 2.00:

        PEG5 = str(sourceCode).split('PEG Ratio (5 yr expected)<font size="-1"><sup>1</sup></font>:</td><td class="yfnc_tabledata1">')[1].split('</td>')[0]
        if 0 < float(PEG5) < 2:

            PE12t = str(sourceCode).split('Trailing P/E (ttm, intraday):</td><td class="yfnc_tabledata1">')[1].split('</td>')[0]
            ofInterest.append(stock)
            print('______________________________\n'+
            'stock meets requirements ' + stock + '\n' +
            'price book ratio ' + pbr + '\n' +
            'price earnings growth 5 years ' + PEG5 + '\n'+
            'trailing PE 12 months ' + PE12t + '\n' +
            '______________________________')

            netIncome = Quandl.get(("DMDRN/"+stock+"_NET_INC"), trim_start="2002-12-31", trim_end="2012-12-31", 
                        )
            revenue = Quandl.get(("DMDRN/"+stock+"_REV_LAST"), trim_start="2002-12-31", trim_end="2012-12-31", 
                                    )
            ROC = Quandl.get(("DMDRN/"+stock+"_ROC"), trim_start="2002-12-31", trim_end="2012-12-31", 
                                )
            print(netIncome, revenue, ROC)

            plt.subplot(3,1,1)
            plt.title(stock)
            plt.ylabel("Net Income")
            plt.plot(netIncome.index, netIncome)

            plt.subplot(3,1,2)
            plt.ylabel("Revenue")
            plt.plot(revenue.index, revenue)

            plt.subplot(3,1,3)
            plt.ylabel("Return on Capital")
            plt.xlabel("year")
            plt.plot(ROC.index, ROC)
            plt.show()
    return ofInterest

except Exception as e:
    print('failed in the main loop', str(e))
    # pass


for eachStock in sp500u:
    yahooKeyStats(eachStock)
4

1 回答 1

0

问题出在 matplotlib 模块上。它不允许循环在没有先关闭图表的情况下继续。对于 matplotlib 和 python 的初学者来说,没有真正的文档可以说明这一点。 是否可以有多个 PyPlot 窗口?还是我仅限于子图?

于 2014-11-17T05:39:36.077 回答