Web Scraping Code提取股票价格

时间:2016-02-21 19:38:58

标签: python python-2.7 web-scraping

我正在创建一个使用符号提取股票价格的网络报废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

如何让它发挥作用?

2 个答案:

答案 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更强大。