我最近看到有关某人抓取雅虎财务页面股价的帖子,代码是这样的:
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我不知道如何做到这一点。
答案 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