【问题标题】:Reading the stock market value from yahoo finance从雅虎财经读取股市价值
【发布时间】:2015-09-22 20:09:41
【问题描述】:
import urllib.request, urllib.error

m = 0 
web ='x'  # This reads the stock value for "United States Steel Corp."
t =str(web)
try: f = urllib.request.urlopen('http://finance.yahoo.com/q?s='+ t +'')
except ValueError:
    print(str('Error'))
    m = 1
    pass

if m == 0:
    urlText = f.read().decode('utf-8')

    if urlText.find('<span id="yfs_l84_'+ t +'">'):
        cat = urlText[urlText.find('<span id="yfs_l84_'+ t +'">'):urlText.find('<span id="yfs_l84_'+ t +'">')+30]
        dog = cat.strip('</span></span>')
        dog = cat.strip('<span id="yfs_l84_'+ t +'">')
        print('United States Steel Corp. = ', dog)
    else:print("---> Couldn't read URL text")

该程序正在读取特定公司缩写的股票价值。在我的情况下,第 3 行显示web ='x'

我想要实现的是,如果我在分配的 web 变量中输入更多缩写,那么我应该能够显示所有输入缩写的股票值。我的意思是:web = 'x', 'y', 'z'

我不确定如何在我的程序中实现它。我相信我需要创建一个数组,然后使用for 循环进行循环。但是,我不确定。

谢谢!!

【问题讨论】:

  • 我认为你的web var 已经属于type string,所以t var 是不必要的。
  • 使用 for 循环/迭代器。但一个好的方法是在函数中重写你的代码。接受参数 t 并获取它的股票价值。然后,使用 for 迭代器 - 就像 @Onilol 显示的那样。 for t in web: your_function(t)
  • 没错!最好把你的程序分成不同的任务(功能)!每个特定的东西都可以是一个函数!正如@marmeladze 建议的那样,这可以提高您的代码质量并使其更易于维护。
  • 查看此处了解获取此信息的更简单方法stackoverflow.com/questions/27543776/…
  • 是他们的任何人都可以请进一步帮助我这个程序。我确实从 Onilol 最初给我的结果中得到了正确的结果。现在,我只想从 web = ['x','y','z'] 中读取 x 、 y 、 z 及其相应的股票值。它应该显示 -> x = stockvalue, y = stockvalue, z = stockvalue。

标签: python arrays loops yahoo-finance ticker


【解决方案1】:

Python 中的数组称为列表!你可以这样做:

web = ['x','y','z']

并循环它们,你可以这样:

for i in web:
    #do stuff

此链接也可以帮助您学习 Python:Python Track in CodeAcademy

编辑:OP 正在寻找字典。

companies = {
        'Company A' : 15,
        'Company B' : 6 
        }

在字典中,您可以通过索引访问元素:companies['Company A'] 将返回它的值 6

【讨论】:

  • i 更改为 t 然后其余代码就不需要更改了:)
  • 如果他的'x','y','z' 已经是字符串,那么对t 的调用将是不必要的!主要取决于他处理的数据类型。
  • 好的。伟大的。那行得通。下一个问题是如何阅读公司名称。例如:对于'x',公司名称是“United States Steel Corp.”,所以当我获取我的股票价值时,它应该打印“United States Steel Corp. = stockvalue(a number)”。这是我输入的每个公司名称。
  • 没有。我不能。我们需要将相同的公司名称缩写与股票价值一起打印出来。因此,无论我输入多少个缩写,它都应该读取 web = ['x','y','z'] 中的公司名称缩写。所以,x = stockvalue,y = stockvalue,z = stockvalue,如果我输入 more,以此类推
  • 在这种情况下,您想要的不是列表。你想要的是一本字典。我将编辑我的答案,给你一个字典的例子。
【解决方案2】:

您通过 YFinance API 请求报价,方法是使用 + 连接符号(例如 AAPL+GOOG+MSFT)。要加入这样的符号列表,'+'.join(symbols)。然后您需要附加&amp;f=...。我使用&amp;f=a 获得了要价。

import urllib

symbols = ['MSFT', 'AAPL', 'GOOG']

# To request ask (delayed) for all symbols.
url_req = ("http://finance.yahoo.com/d/quotes.csv?s={symbols}&f=a"
           .format(symbols="+".join(symbols)))

prices = urllib.request.urlopen(url_req).read().decode().split('\n')

# Use dictionary comprehension together with zip to get dict of values.
ask_quotes = {symbol: quote for symbol, quote in zip(symbols, prices)}

>>> url_req
'http://finance.yahoo.com/d/quotes.csv?s=MSFT+AAPL+GOOG&f=a'

>>> ask_quotes
{'AAPL': '114.60', 'GOOG': '614.920', 'MSFT': '43.93'}

【讨论】:

    猜你喜欢
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2022-01-22
    • 2021-03-25
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多