Python 从谷歌金融获取价格的页面抓取

Python 从谷歌金融获取价格的页面抓取,python,screen-scraping,urllib,stockquotes,google-finance,Python,Screen Scraping,Urllib,Stockquotes,Google Finance,我试图通过抓取谷歌金融页面来获取股票价格,我是在python中这样做的,使用urllib包,然后使用正则表达式来获取价格数据 当我让python脚本继续运行时,它开始工作一段时间(几分钟),然后开始抛出异常[HTTP错误503:服务不可用] 我猜这是因为在web服务器端,它像机器人一样检测到频繁的页面更新,并在一段时间后抛出此异常 有没有办法解决这个问题,即删除一些cookie或创建一些cookie等 或者更好的是,如果谷歌提供了一些API,我想在Python中这样做,因为Python中有完整的

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

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

我猜这是因为在web服务器端,它像机器人一样检测到频繁的页面更新,并在一段时间后抛出此异常

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

或者更好的是,如果谷歌提供了一些API,我想在Python中这样做,因为Python中有完整的应用程序,但是如果Python中没有任何可用的程序来执行这个操作,我可以考虑替代方案。这是我在循环中使用的python方法,用于获取数据(在几秒钟的睡眠时间内,我在循环中调用此方法)


有一个Google Finance API:

还有一个Python客户端库:


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

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

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

对于Python2,您可以使用。对于Python3,您可以使用我从上一个重写的

获取谷歌和英特尔的最新报价

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

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

有一个开源项目可以从谷歌金融(Google finance)中挖出所有公司,并将它们与当前价格相匹配
该项目解决了大多数问题,包括缓存、IP管理,工作稳定,不会被阻塞。
它使用内部财务公司匹配api来刮取公司,使用图表api来获取价格。
然而,它是php代码,而不是python。您仍然可以了解它是如何解决任务并进行调整的

阅读同意的5.3…API是“谷歌提供的接口”,这合法吗?我的意思是在谷歌和雅虎上做网络报废?我宁愿这样做:谷歌金融API在2011年5月26日已经被正式弃用,并将于2012年10月20日关闭(你能在urlfetch和urllib2中使用这个技巧吗?回答很好,但代码是为专业IP地址提供商us-proxies.com编写的。显然,刮刀使用不同的IP地址以避免被拒之门外。该网站对5个IP地址收取约30美元/月的费用,对30个IP地址收取145美元/月的费用。你是r好的,代码是开源的,如果你有一个更便宜的/自己的IP解决方案,你可以试试你需要的部分。对于谷歌金融,你不需要很多IP,这取决于你到底想做什么。
>>> 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']]