2017-10-26 19 views
-2

これを数日間試してみると、私は狂ってしまいます!私はMorningstarsのウェブサイト(左端の列)から、テーブル内のすべての資金の名前を取得しようとしているが、私は言われ続けて:AttributeError: 'NoneType'オブジェクトには属性 'findAll'がありません - Python

"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() 
+1

bs4では、 'findAll'は実際に' find_all() 'です。 'findAll'はbs3です – cosinepenguin

+0

コメントありがとう、私は" find_all "で試しても、同じエラーが発生します。 –

+0

さて、よく。 'id =" table1f "'を持つテーブルも存在しません。 –

答えて

1

参照してくださいここでの問題は、そのsoup.findはNoneを返していないです。 NoneのクラスはNoneTypeであり、NoneTypeはfind_allなど何もありません。

soup.findは返されません。ドキュメント内に、あなたが求めたものと一致するテーブルが存在しないためです。実際、私はそれを見てきましたが、HTMLテーブルはまったくありません。 のように見えますが、HTMLテーブルのマークアップを含むHTMLコメントがあるので、テーブルがありますが、コメントは合理的なパーサーによって不透明として扱われます。

あなたが本当にコメント内のHTMLを解析したい場合は、あなたは、適切なコメントを見つけた後、再び美しいスープでそれを解析する必要があります

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

ですべてのコメントを得ることができます。このHTMLはコメント内にあるので、有効なHTMLであるという保証はありません。

+0

ありがとう、アーロン!私はこれがHTMLテーブルではないので、これは全く新しいです。どのようにしてテーブルの情報を取得できますか? –