名称错误: 名称未定义网页抓取工具



嗨,我正在尝试为标准普尔500指数公司构建一个简单的ESG数据网络,但由于某种原因,我一直收到NameError:

name 'web_scraper' is not defined

现在尝试了一些事情,但无法使其工作。我是初学者,所以一定忽略了一些东西。提前致谢

from bs4 import BeautifulSoup
import pandas as pd
import requests
import ipywidgets as widgets
from ipywidgets import interact
def get_tickers():
# wiki_page = requests.get()
sp_data = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
ticker_df = sp_data[0]
ticker_options = ticker_df['Symbol']
return ticker_options
def level(x):
if x == 0.0:
return 'No Controversy'
elif x == 1.0:
return 'Little Controversy'
elif x == 2.0: 
return 'Moderate Controversy'
elif x == 3.0: 
return 'Relatively High Controversy'
else:
return 'Little Controversy'
def web_scraper(ticker):
elements = []
web_data = requests.get('https://finance.yahoo.com/quote/'+ticker+'+/sustainability?p='+ticker).text
soup = BeautifulSoup(web_data, 'html.parser')
esg_score = soup.find('div', {'class':'Fz(36px) Fw(600) D(ib) Mend(5px)'})
datapoint = esg_score.text
controversy_score = soup.find('div', {'class':'D(ib) Fz(36px) Fq(500)'})
controversy_datapoint = controversy_score.text
scores = soup.find_all('div', {'class': 'D(ib) Fz(23px) smartphone_Fz(22px) Fq(600)'})
for score in scores:
elements.append(score.text)
df = pd.DataFrame({'Total ESG Score': datapoint,
'Environment Score': elements[0],
'Social Score': elements[0],
'Governance Score': elements[2],
'Controversy Score': controversy_datapoint},
index = [ticker])
df = df.astype('float')
df['Controversy Assessment'] = df.apply(lambda x: level(x['Controversy Score']), axis=1)
return df
@interact
def get_esg(ticker=widgets.Dropdown(description='Ticker',
options=get_tickers(),
value = 'F')):
esg_data = web_scraper(ticker)
return esg_data

由于您的缩进,def web_scraperdef level中定义,这是在def get_tickers中定义的。因此,如果您希望能够从任何地方访问web_scraper,则必须在全局范围内定义它,而不仅仅是在另一个函数的范围内(它本身在另一个函数中)。

最新更新