我正在尝试使用BeautifulSoup抓取数据
该代码取自该博客,但是由于某种原因,BeautifulSoup函数无法正常工作。
代码如下:
# Define The Method To Extract Fundamental Data
def fundamental_metric(soup, metric):
return soup.find(text=metric).find_next(class_='snapshot-td2').text
def get_fundamental_data(df):
for symbol in df.index:
url = ("http://finviz.com/quote.ashx?t=" + symbol.lower())
soup = bs(requests.get(url).content, features='html5lib')
for m in df.columns:
try:
df.loc[symbol, m] = fundamental_metric(soup, m)
except Exception as e:
print(symbol, 'not found')
print(e)
break
return df
# Define A List Of Stocks And The Fundamental Metrics
stock_list = ['AMZN', 'GOOG', 'PG', 'KO', 'IBM', 'DG', 'XOM',
'KO', 'PEP', 'MT', 'NL', 'ALDW', 'DCM', 'GSB', 'LPL']
metric = ['P/B',
'P/E',
'Forward P/E',
'PEG',
'Debt/Eq',
'EPS (ttm)',
'Dividend %',
'ROE',
'ROI',
'EPS Q/Q',
'Insider Own'
]
df = pd.DataFrame(index=stock_list, columns=metric)
df = get_fundamental_data(df)
print("All stocks with fundamental data")
print(df.head())
我得到的结果是未找到列表中的那些值,并且该对象没有属性Find_next,但不应显示该属性。我尝试了列表+网站url上的代码,它可以工作,但是当我将它放在python中时,它却没有。它显示如下内容:
AMZN not found
'NoneType' object has no attribute find_next
如果您知道BeautifulSoup无法正常工作的原因,我将不胜感激。
最好!
问题是自博客文章(2018年3月12日)以来,您正在搜索的页面已更新,并且现在它们要求您在发送给他们的HTTP GET请求中具有标头
如果您不添加标题,那么它们将使您无法查看HTML
所以如果你这样添加标题
...
HEADERS = {'User-Agent': 'Chrome/50.0.2661.102 Safari/537.36'}
...
def get_fundamental_data(df):
for symbol in df.index:
url = ("http://finviz.com/quote.ashx?t=" + symbol.lower())
soup = bs(requests.get(url, headers=HEADERS).content, features='html5lib')
...
然后工作,您就可以获取数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句