Python刮股票价格

时间:2015-12-01 12:12:51

标签: python python-3.x input beautifulsoup

我最近看到有关某人抓取雅虎财务页面股价的帖子,代码是这样的:

from bs4 import BeautifulSoup
import requests


name = input('>')
url = 'http://finance.yahoo.com/q?s={}'.format(name)
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
data = soup.find('span', attrs= {'id':'yui_3_9_1_8_1448922823083_37'.format(name)})
print(data.text)

我认为代码本身可能有效,但它只是错误的ID,因为它说:

'NoneType' object has no attribute 'text'

我要问的是如何找到价格合适的HTML标签(例如google(goog))。

如果有人有时间,我也想知道如何刮掉多个股票(在name = input('>)上放一个while循环,直到我说'stop')同时更改div我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:2)

自编写代码以来,正在搜索的ID已更改。以下内容应该有效,它还会告诉您如何在输入end之前保持循环:

from bs4 import BeautifulSoup
import requests
import re

while True:
    symbol = input("Enter symbol: ")

    if symbol == 'stop':
        break

    url = 'http://finance.yahoo.com/q?s={}'.format(symbol)
    r = requests.get(url)
    soup = BeautifulSoup(r.text, "html.parser")

    try:
        data = soup.find('span', attrs= {'id' : re.compile(r'yfs_.*?_{}'.format(symbol.lower()))})
        print('{} = {}'.format(symbol, data.text))
    except AttributeError:
        print("Unknown symbol: {}".format(symbol))

这会给你以下输出:

Enter symbol: GOOG
GOOG = 742.60
Enter symbol: EURGBP
EURGBP = 0.7040
Enter symbol: stop