簡體   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