4

我试图通过抓取谷歌财务页面来获取股票价格,我在 python 中这样做,使用 urllib 包,然后使用正则表达式来获取价格数据。

当我让我的 python 脚本运行时,它最初会工作一段时间(几分钟),然后开始抛出异常 [HTTP 错误 503:服务不可用]

我猜这是因为在 Web 服务器端它检测到频繁的页面更新作为机器人并在一段时间后抛出这个异常..

有没有办法解决这个问题,即删除一些cookie或创建一些cookie等。

或者如果谷歌提供一些 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
4

4 回答 4

5

这个问题很老,但选择的答案不再有效。
该 API 已被弃用。

有一个开源项目可以从谷歌金融中抓取所有公司并将它们与当前价格相匹配,网址为http://scrape-google-finance.compunect.com/
该项目解决了大多数问题,包括缓存、IP 管理并且无需被封锁。
它使用内部财务公司匹配api来抓取公司和图表api来获取价格。但是它是 php 代码,而不是 python。您仍然可以了解它如何解决任务并进行调整。

于 2014-04-02T10:48:45.050 回答
3

要绕过来自谷歌、维基百科或雅虎之类的大多数速率限制或机器人检测,请欺骗您的用户代理。

这将使您的脚本请求看起来像是来自最新版本的 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()
于 2011-04-12T21:11:17.450 回答
3

雅虎财经也是获取涵盖更多国家和股票的金融信息的好地方。

对于 python 2,您可以使用ystockquote。对于 python 3,您可以使用我从前一个重写的yfq 。

获取谷歌和英特尔的当前报价。

>>> import yfq
>>> yfq.get_price('GOOG+INTL')
{'GOOG': '600.25', 'INTL': '22.25'}

获取雅虎 2012 年 3 月 3 日至 2012 年 3 月 5 日的历史报价。

>>> 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']]
于 2012-03-12T00:53:28.030 回答
2

有一个谷歌金融 API:

http://code.google.com/apis/finance/docs/2.0/developers_guide_protocol.html

并且有一个 Python 客户端库:

http://code.google.com/p/gdata-python-client/

于 2011-04-12T14:37:46.720 回答