AttributeError:' NoneType'对象没有属性' findAll' - Python

时间:2017-10-26 00:04:09

标签: python beautifulsoup

我已经试图解决这个问题好几天了,这让我发疯了!我试图从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()

2 个答案:

答案 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()调用没有返回任何内容。