Python URL请求Yahoo API

2024-09-28 21:56:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了这个脚本,使用ystockquote master来获取Yahoo财务API的价格和市值。它非常简单,在我的电脑上运行良好,但是当我试图在我的朋友mac上使用它时,我得到了一个错误。这是一个很长的一个,所以我会张贴在最后。我一直在努力寻找到底发生了什么事,所以我转向这里。背景:从初学者到新手。下面是我的代码片段:

try:
    # py3
    from urllib.request import Request, urlopen
    from urllib.parse import urlencode
except ImportError:
    # py2
    from urllib2 import Request, urlopen
    from urllib import urlencode

def _request(symbol, stat):
    url = 'http://finance.yahoo.com/d/quotes.csv?s=%s&f=%s' % (symbol, stat)
    req = Request(url)
    resp = urlopen(req)
    return str(resp.read().decode('utf-8').strip())
def get_price(symbol):
    return _request(symbol, 'l1')
def get_market_cap(symbol):
    return _request(symbol, 'j1')

i = 0
while i<len(NewSymbolsList):
    results = open("intermediateresults.csv", "a")
    api = [get_price(NewSymbolsList[i]),get_market_cap(NewSymbolsList[i])]
    api = re.sub("\[\'|\'|\]", "", str(api))
    results.write(str(NewSymbolsList[i]) +"," +str(api) +"\n")
    print NewSymbolsList[i], api                  
    i+=1
results.close()

以下是我在朋友Mac上看到的错误:

^{pr2}$

显示我如何准备要迭代的列表的编辑(我猜是相当标准的,但我认为这可能有帮助):

symbols = open("symbolslist.txt")
readsymbols = symbols.read()
NewSymbolsList = readsymbols.split("\n")

Tags: fromimportapigetreturnrequestdef朋友
1条回答
网友
1楼 · 发布于 2024-09-28 21:56:39

好吧,我们来试试这个。我怀疑所面临的问题与源文件中的空白有关(可能是流氓?)。作为补充说明,我介绍了两个with子句上下文管理器,以说明它们用于文件处理的用法。在

import re
try:
    # py3
    from urllib.request import Request, urlopen
    from urllib.parse import urlencode
except ImportError:
    # py2
    from urllib2 import Request, urlopen
    from urllib import urlencode

def _request(symbol, stat):
    url = 'http://finance.yahoo.com/d/quotes.csv?s=%s&f=%s' % (symbol, stat)
    req = Request(url)
    resp = urlopen(req)
    return str(resp.read().decode('utf-8').strip())

def get_price(symbol):
    return _request(symbol, 'l1')

def get_market_cap(symbol):
    return _request(symbol, 'j1')

symbols = open("symbolslist.txt")
readsymbols = symbols.read()
NewSymbolsList = readsymbols.split("\n")

with open('symbolslist.txt') as ifp, open('intermediateresults.csv', 'a') as results_fp:
    for row in ifp:
        row = row.strip()
        api = [ get_price(row), get_market_cap(row) ]
        api = re.sub("\[\'|\'|\]", "", str(api))
        results_fp.write(str(row) +"," +str(api) +"\n")
        print row, api

在我的电脑上,打印:

^{pr2}$

相关问题 更多 >