页面抓取以从Google Finance获取价格

| 我正在尝试通过抓取Google财务页面来获取股价,我正在python中使用urllib软件包,然后使用正则表达式来获取价格数据。 当我让python脚本运行时,它最初会工作一段时间(几分钟),然后开始引发异常[HTTP错误503:服务不可用] 我猜这是因为在Web服务器端它会检测到频繁的页面更新(例如漫游器),并在一段时间后引发此异常。 有没有解决的办法,即删除一些cookie或创建一些cookie等。 甚至如果Google提供了一些api甚至更好,我想在python中做到这一点,因为在python中有完整的应用程序,但是如果python中没有可用的应用程序,我可以考虑使用其他方法。这是我在循环中使用的python方法来获取数据(经过几秒钟的睡眠,我在循环中将此方法称为)
 def getPriceFromGOOGLE(self, symbol):
    \"\"\" 
    gets last traded price from google for given security
    \"\"\"         
    toReturn = 0.0
    try:
        base_url = \'http://google.com/finance?q=\'
        req = urllib2.Request(base_url + symbol)
        content = urllib2.urlopen(req).read()
        namestr = \'name:\\\"\' + symbol + \'\\\",cp:(.*),p:(.*),cid(.*)}\'
        m = re.search(namestr, content)
        if m:
            data = str(m.group(2).strip().strip(\'\"\'))
            price = data.replace(\',\',\'\')
            toReturn = float(price)
        else:
            print \'ERROR \' + str(symbol) + \' --- \' + str(content)      
    except Exception, exc:
        print \'Exc: \' + str(exc)       
    finally: 
        return toReturn
    
已邀请:
有一个Google Finance API: http://code.google.com/apis/finance/docs/2.0/developers_guide_protocol.html 并且有一个Python客户端库: http://code.google.com/p/gdata-python-client/     
该问题已经很老了,但所选答案不再有效。 该API已被弃用。 有一个开源项目可以从Google财务中抓取所有公司,并将其与当前价格相匹配,网址为http://scrape-google-finance.compunect.com/ 该项目解决了大多数问题,包括缓存,IP管理,并且工作稳定且不受阻碍。 它使用内部财务公司匹配API来抓取公司,并使用图表API来获取价格。 但是,它是php代码,而不是python。您仍然可以了解它如何解决任务并对其进行调整。     
要避开大多数Google或Wikipedia或Yahoo之类的限速或漫游器检测,请欺骗您的用户代理。 这会使您脚本的请求似乎来自最新版本的Google Chrome。
headers = {\'User-Agent\' : \"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24\"}
req = urllib2.Request(url,None,headers)
content = urllib2.urlopen(req).read()
    
雅虎财经也是获取涵盖更多国家和股票的财务信息的好地方。 对于python 2,您可以使用ystockquote。对于python 3,您可以使用我从上一个重写的yfq。 获取Google和Intel的最新报价。
>>> import yfq
>>> yfq.get_price(\'GOOG+INTL\')
{\'GOOG\': \'600.25\', \'INTL\': \'22.25\'}
获取2012年3月3日至2012年3月5日的Yahoo历史报价。
>>> yfq.get_historical_prices(\'YHOO\',\'20120301\',\'20120303\')
[[\'Date\', \'Open\', \'High\', \'Low\', \'Close\', \'Volume\', \'Adj Close\'], [\'2012-03-02\', \'14.89\', \'14.92\', \'14.66\', \'14.72\', \'9164900\', \'14.72\'], [\'2012-03-01\', \'14.89\', \'14.96\', \'14.79\', \'14.93\', \'12283300\', \'14.93\']]
    

要回复问题请先登录注册