2016-10-12 2 views
-1

私はbeautifulsoup4を使用して在庫データを取得し、Pythonでスプレッドシートに送信しています。私が抱えている問題は、Noneを返す属性をスキップするループを得ることができないということです。だから私が必要としているのは、 属性が返されない行にnull値を追加するコードです。Pythonハンドル 'NoneType'オブジェクトには、else文との 'find_all'エラーがありません

//my dictionay for storing data 
data = { 
    'Fiscal Quarter End' : [], 
    'Date Reported' : [], 
    'Earnings Per Share' : [], 
    'Consensus EPS* Forecast' : [], 
    '% Surprise' : [] 
} 

    url = "" 
    html = requests.get(url) 
    data = html.text 
    soup = bs4.BeautifulSoup(data) 


    table = soup.find("div", class_="genTable") 
    for row in table.find_all('tr')[1:]: 

     if row.has_attr('tr'): 

      cols = row.find_all("td") 
      data['Fiscal Quarter End'].append(cols[0].get_text()) 
      data['Date Reported'].append(cols[1].get_text()) 
      data['Earnings Per Share'].append(cols[2].get_text()) 
      data['Consensus EPS* Forecast'].append(cols[3].get_text()) 
      data['% Surprise'].append(cols[4].get_text()) 
     else: 
      //where i need to add in the empty 'n/a' values 
      data['Fiscal Quarter End'].append() 
      data['Date Reported'].append() 
      data['Earnings Per Share'].append() 
      data['Consensus EPS* Forecast'].append() 
      data['% Surprise'].append() 
+0

'//' ...あなたが定義している – brianpck

+4

Pythonでのコメントではありませんdataという名前の辞書を作成し、html.textをデータに割り当て、次にデータを辞書にすることを期待しています。 – saq7

+0

最初にデータ変数を辞書として使用しており、HTMLテキストを格納する文字列としても使用します。これは間違いなくあなたに問題を引き起こすでしょう。また、なぜ空のデータを追加する必要があるのか​​を明確にすることはできますか? –

答えて

0

data変数は2つの異なるものに使用されています。 2番目の使用法は辞書を上書きします。 soup.find()への呼び出しでhtml.textを使用する方が簡単です。次のことを試してみてください。

import requests 
import bs4  

# My dictionary for storing data 
data = { 
    'Fiscal Quarter End' : [], 
    'Date Reported' : [], 
    'Earnings Per Share' : [], 
    'Consensus EPS* Forecast' : [], 
    '% Surprise' : [] 
    } 

empty = 'n/a' 
url = "" 
html = requests.get(url) 
soup = bs4.BeautifulSoup(html.text, "html.parser") 
table = soup.find("div", class_="genTable") 
rows = [] 

if table: 
    rows = table.find_all('tr')[1:] 

    for row in rows: 
     cols = row.find_all("td") 
     data['Fiscal Quarter End'].append(cols[0].get_text()) 
     data['Date Reported'].append(cols[1].get_text()) 
     data['Earnings Per Share'].append(cols[2].get_text()) 
     data['Consensus EPS* Forecast'].append(cols[3].get_text()) 
     data['% Surprise'].append(cols[4].get_text()) 

if len(rows) == 0: 
    # Add in the empty 'n/a' values if no columns found 
    data['Fiscal Quarter End'].append(empty) 
    data['Date Reported'].append(empty) 
    data['Earnings Per Share'].append(empty) 
    data['Consensus EPS* Forecast'].append(empty) 
    data['% Surprise'].append(empty)  

イベントでtableまたはrowsが空だった、dataは以下を保持します:

{'Date Reported': ['n/a'], 'Earnings Per Share': ['n/a'], '% Surprise': ['n/a'], 'Consensus EPS* Forecast': ['n/a'], 'Fiscal Quarter End': ['n/a']} 
関連する問題