自动获取标准普尔 500 指数名单

Automating getting the S&P 500 list

所以我在 Python 上使用这个 series 用于财务,它一直给我错误 --

1) line 22, in <module> save_sp500_tickers() and 

2) line 8, in save_sp500_tickers
    soup = bs.BeautifulSoup(resp.text,'lxml')and 

3) line 165, in __init__
    % ",".join(features))
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml.
Do you need to install a parser library?

我已经做了一整天了,老实说我拒绝放弃,如果有任何帮助,我将不胜感激。另外,如果有人对 pickle 以外的东西有任何建议,并且可以帮助写一些让我可以在没有 pickle 的情况下调用 SP500 的东西,那就太好了。

import bs4 as bs    
import pickle    
import requests    
import lxml    
def save_sp500_tickers():
    resp = requests.get('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')        
    soup = bs.BeautifulSoup(resp.text,'lxml')        
    table = soup.find('table', {'class': 'wikitable sortable'})        

    tickers = []

    for row in table.findAll('tr')[1:]:
        ticker = row.findAll('td')[0].text
        tickers.append(ticker)

    with open("sp500tickers.pickle", "wb") as f:
        pickle.dump(tickers, f)
    print(tickers)

    return tickers    

save_sp500_tickers()

运行 您的代码按原样在我的系统上运行。可能,正如 Eric 所建议的,您应该安装 lxml。

不幸的是,如果您使用 Windows,除非您设置了完整的编译器基础结构,否则 pip install lxml 将不起作用。

幸运的是,您可以从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 获得预编译的二进制安装程序 - 确保选择与您的 python 版本相匹配的安装程序,无论它是 32 位还是 64 位。

编辑: 仅供参考,尝试更改行

soup = bs.BeautifulSoup(resp.text, 'html.parser')   # use Python's built-in parser instead

有关可用解析器的列表,请参阅 https://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser