繁体   English   中英

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

[英]AttributeError: 'NoneType' object has no attribute 'findAll' - Python

这几天我一直在想办法解决这个问题,这让我发疯了! 我试图从 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()

这里的问题是soup.find 返回None。 None 的类是 NoneType,并且 NoneType 没有 find_all 或任何类似的东西。

sound.find 返回 None 因为文档中没有与您要求的表相匹配的表。 事实上,我已经看过了,根本没有 HTML 表格。 看起来有一个表格,因为有一个包含 HTML 表格标记的 HTML 注释,但任何合理的解析器都将注释视为不透明的。

如果你真的想解析注释中的 HTML,你可以得到所有的注释

comments = soup.find_all(string=lambda text:isinstance(text,bs.Comment))

然后,您必须找到适当的评论,然后再次用漂亮的汤解析它。 由于此 HTML 位于注释中,因此不能保证它是有效的 HTML。

来自 BS4 文档:

AttributeError: 'NoneType' object has no attribute 'foo' - 这通常是因为您调用了 find() 然后尝试访问结果的 .foo` 属性。 但是在您的情况下, find() 没有找到任何内容,因此它返回 None,而不是返回标签或字符串。 您需要弄清楚为什么您的 find() 调用没有返回任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM