我已经试图解决这个问题好几天了,这让我发疯了!我试图从Morningstars网站(最左边一栏)获取表格中的所有资金名称,但我一直被告知:
"AttributeError: 'NoneType' object has no attribute 'findAll'".
也许我专注于错误的课堂课程,但不确定。晨星的名字示例:明治安田DC日本债券オープン「爱称:DCしあわせ宣言」
请参阅下文
import bs4 as bs
import pickle
import requests
# gather data into variable
def save_DC_names():
resp = requests.get('http://www.morningstar.co.jp/FundData/DetailSearchResult.do?pageNo=1')
soup = bs.BeautifulSoup(resp.text,"lxml")
table = soup.find('table',{'class': "table1f"})
tickers = []
for row in table.find_all('tr')[1:]:
ticker = row.find_all('td')[0].text
tickers.append(ticker)
with open("DCtickers.pickle","wb") as f:
pickle.dump(tickers,f)
print(tickers)
return tickers
save_DC_names()
答案 0 :(得分:1)
这里的问题是soup.find返回None。 None类是NoneType,NoneType没有find_all或类似的东西。
soup.find返回None,因为文档中没有与您要求的内容相匹配的表格。事实上,我已经看了它,根本没有HTML表格。它看起来像那样是一个表,因为HTML注释包含HTML表标记,但任何合理的解析器都会将注释视为不透明。
如果您真的想要解析评论中的HTML,可以使用
获取所有评论comments = soup.find_all(string=lambda text:isinstance(text,bs.Comment))
然后你必须找到适当的评论,然后再用美丽的汤解析它。由于此HTML在评论中,因此无法保证它是有效的HTML。
答案 1 :(得分:0)
从BS4文档中:
AttributeError:'NoneType'对象没有属性'foo'-通常发生这种情况是因为您调用find(),然后尝试访问结果的.foo`属性。但是在您的情况下,find()找不到任何东西,因此它返回None,而不是返回标签或字符串。您需要弄清楚为什么find()调用没有返回任何内容。