我正在创建一个使用符号提取股票价格的网络报废python代码(使用2.7.11)。我不知道为什么这不起作用。但它给了我这个输出:
Enter Financial Symbol
appl YPE h
Do you want to run again?
我的代码如下:
import urllib
go=True
while go:
print "Enter Financial Symbol"
symbol=raw_input()
page=urllib.urlopen("http://finance.yahoo.com/q?s=" + symbol)
text=page.read()
where=text.find("yfs_l84")
start=where+7
end=start+5
result = text[start:end]
print ( symbol + " "+ result)
print "Do you want to run again?"
choice=raw_input()
if choice == "no":
go=False
如何让它发挥作用?
答案 0 :(得分:0)
您要搜索的字符串"yfs_l84"
未包含在yahoo返回的HTML中。所以
where=text.find("yfs_l84")
将where
留给-1
。因此,您的切片text[start:end]
始终为text[6:11]
,并且会从页面来源中剪切YPR h
:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en-US">
<head>
...
答案 1 :(得分:0)
您不应该使用str.find来解析网页,您应该使用像bs4这样的html解析器,但在这种情况下,有一个api,您可以以json格式请求数据,并结合{ {3}}使获取数据非常简单。
In [25]: import requests
In [26]: sym = "DVN"
In [27]: r = requests.get("http://finance.yahoo.com/webservice/v1/symbols/{sym}/quote?format=json".format(sym=sym))
In [28]: r.json()
Out[28]:
{'list': {'meta': {'count': 1, 'start': 0, 'type': 'resource-list'},
'resources': [{'resource': {'classname': 'Quote',
'fields': {'name': 'Devon Energy Corporation Common',
'price': '18.650000',
'symbol': 'DVN',
'ts': '1455915714',
'type': 'equity',
'utctime': '2016-02-19T21:01:54+0000',
'volume': '33916489'}}}]}}
In [29]: sym = "YHOO"
In [30]: r = requests.get("http://finance.yahoo.com/webservice/v1/symbols/{sym}/quote?format=json".format(sym=sym))
In [31]: r.json()
Out[31]:
{'list': {'meta': {'count': 1, 'start': 0, 'type': 'resource-list'},
'resources': [{'resource': {'classname': 'Quote',
'fields': {'name': 'Yahoo! Inc.',
'price': '30.040001',
'symbol': 'YHOO',
'ts': '1455915600',
'type': 'equity',
'utctime': '2016-02-19T21:00:00+0000',
'volume': '20734985'}}}]}}
In [32]: sym = "AAPL"
In [33]: r = requests.get("http://finance.yahoo.com/webservice/v1/symbols/{sym}/quote?format=json".format(sym=sym))
In [34]: r.json()
Out[34]:
{'list': {'meta': {'count': 1, 'start': 0, 'type': 'resource-list'},
'resources': [{'resource': {'classname': 'Quote',
'fields': {'name': 'Apple Inc.',
'price': '96.040001',
'symbol': 'AAPL',
'ts': '1455915600',
'type': 'equity',
'utctime': '2016-02-19T21:00:00+0000',
'volume': '35374173'}}}]}}
您可以使用按键访问所需的任何数据,这比str.find更强大。