【问题标题】:page scraping to get prices from google finance页面抓取以从谷歌金融获取价格
【发布时间】:2011-08-03 23:05:46
【问题描述】:

我试图通过抓取谷歌财务页面来获取股票价格,我在 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

【问题讨论】:

  • TOS读取5.3
  • 同意...API 是“由 Google 提供的接口”
  • 这合法吗?我的意思是在 google 和 yahoo 上进行网页抓取?
  • 我宁愿用这个:fixer.io

标签: python screen-scraping urllib stockquotes google-finance


【解决方案1】:

【讨论】:

【解决方案2】:

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

这将使您的脚本请求看起来像是来自最新版本的 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()

【讨论】:

  • 你能在 urlfetch 和 urllib2 中使用这个技巧吗?
【解决方案3】:

Yahoo Finance 也是获取涵盖更多国家和股票的金融信息的好地方。

对于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']]

【讨论】:

    【解决方案4】:

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

    有一个开源项目可以从 Google 财务中抓取所有公司,并将它们与当前价格相匹配,http://scrape-google-finance.compunect.com/
    该项目解决了大部分问题,包括缓存、IP 管理和稳定运行而不会被阻止。
    它使用内部财务公司匹配api来抓取公司和图表api来获取价格。 但是它是 php 代码,而不是 python。您仍然可以了解它如何解决任务并进行调整。

    【讨论】:

    • 很好的答案,但代码是为与专业 IP 地址提供商 us-proxies.com 一起使用而编写的。显然,抓取工具使用不同的 IP 地址来避免被拒之门外。该网站对五个 IP 地址收费约 30 美元/月,对 30 个 IP 地址收费 145 美元/月。
    • 你是对的,代码是开源的,如果你有一个更便宜/自己的 IP 解决方案,你想试试就拿你需要的部分。对于谷歌金融,你不需要很多 IP,这取决于你到底想做什么。
    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 2018-08-07
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多