繁体   English   中英

使用Python 3从Yahoo Finance网站检索股票信息

[英]Using Python 3 to Retrieve Stock Information From Yahoo Finance Site

我一直在尝试移植一个脚本,该脚本将要求Yahoo Finance网站提供基本数据,但是我想查找特定项目而不是整个报告,例如价格/帐面比率。 因此,我按照Sentdex的教程进行操作。 问题在于示例代码是为Python 2.7编写的,而我正试图使之适用于Python 3,并且当然会通过添加更多功能对其进行扩展。

到目前为止,情况如下:

import time
import urllib
import urllib.request


sp500short = ['a', 'aa', 'aapl', 'abbv', 'abc', 'abt', 'ace', 'aci', 'acn', 'act', 'adbe', 'adi', 'adm', 'adp']


def yahooKeyStats(stock):

    try:
        sourceCode = urllib.request.urlopen('http://finance.yahoo.com/q/ks?s='+stock).read()
        pbr = sourceCode.split('Price/Book (mrq):</td><td class="yfnc_tabledata1">')[1].split('</td>')[0]       
        print ('price to book ratio:'),stock,pbr

    except Exception as e:
        print ('failed in the main loop'),str(e)


for eachStock in sp500short:
    yahooKeyStats(eachStock)
    time.sleep(1)

我几乎可以确定问题出在pbr变量定义上,在它的拆分部分上。 该:

 Price/Book (mrq):</td><td class="yfnc_tabledata1">

和...:

</td>

...只是某种分隔符,因为我要寻找的是实际值,它在上面列出的两个项目之间。但是到目前为止,它只是在执行时给我异常消息。

任何帮助都感激不尽。 干杯,

看起来urllib.request.urlopen.read()返回的数据类型为bytes

从python文档中:

请注意,urlopen返回一个字节对象。 这是因为urlopen无法自动确定它从http服务器接收的字节流的编码。 通常,一旦程序确定或猜测了适当的编码,就会将返回的字节对象解码为字符串。

split方法在这里失败。 尝试在.decode()之后附加.decode() .read() 问题是您正在尝试用字符串拆分bytes类型的sourceCode变量。 解码sourceCode会将其从字节转换为字符串。 另外,您也可以.encode()这两个定界符。

bytes.decode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM