2017-02-10 137 views
0

從HTML財務數據我有這個income statement,我很好奇,怎麼有些人會去從HTML數據提取到一個數組。我發佈了我編制的東西。有關改進方法的任何意見。會對使用stdlib,panads,numpy等來查看方法感興趣。由於填充陣列使用python

import requests 
import pandas as pd 
from bs4 import BeautifulSoup 
from collections import OrderedDict 

url = r'http://gambler-restaurant-15377.bitballoon.com/' 

r = requests.get(url, headers={"User-Agent" : b'Opera/9.80 (Windows NT 5.2; U; zh-cn) Presto/2.6.30 Version/10.6'}) 
soup = BeautifulSoup(r.text, 'lxml') 

financial_statement=OrderedDict() 
for row in soup.find_all('table', attrs={'id':'dollarTable'})[0].find_all('tr'): 
    row_items = [] 
    for item in row: 
     try: 
      row_items.append(str(item.get_text(strip=True))) 
     except (AttributeError, ValueError): 
      # headers dont have a tr tag, and thus raises AttributeError 
      # 'Fiscal Year Ending in 2011' raises ValueError 
      pass 
    financial_statement[row_items[0]]=row_items[1:] 



('For year ending Dec,', ['2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015']) 
('Revenues', ['306,057.0', '--', '--', '733,438.0', '390,625.0', '407,708.0', '110,000.0', '18,833.0', '10,417.0']) 
+0

請問你的代碼的工作?如果不是,哪些不起作用? 「 – Evert

+0

」有興趣看看使用stdlib,panads,numpy等等來實現它的方法。「通常情況下,他們會試圖使用這樣一個庫,並且如果它沒有按預期工作,就會要求提供反饋。如果您一般在尋找您的代碼審查:有代替http://codereview.stackexchange.com/。 – Evert

+0

它,但是我在想一個更好的解決辦法是將每個項目以某種方式映射到相關的年份(這是第一項在字典)。因此,例如:「2007」的「收入306,057.0」 – mac

回答

0
import requests 
import pandas as pd 
from bs4 import BeautifulSoup 
from collections import OrderedDict 

url = r'http://gambler-restaurant-15377.bitballoon.com/' 

r = requests.get(url, headers={"User-Agent" : b'Opera/9.80 (Windows NT 5.2; U; zh-cn) Presto/2.6.30 Version/10.6'}) 
soup = BeautifulSoup(r.text, 'lxml') 

financial_statement=OrderedDict() 
for row in soup.find_all('table', attrs={'id':'dollarTable'})[0].find_all('tr'): 
    row_items = [] 
    for item in row: 
     try: 
      row_items.append(str(item.get_text(strip=True))) 
     except (AttributeError, ValueError): 
      # headers dont have a tr tag, and thus raises AttributeError 
      # 'Fiscal Year Ending in 2011' raises ValueError 
      pass 
    financial_statement[row_items[0]]=row_items[1:] 



('For year ending Dec,', ['2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015']) 
('Revenues', ['306,057.0', '--', '--', '733,438.0', '390,625.0', '407,708.0', '110,000.0', '18,833.0', '10,417.0']) 
+0

雖然這可能理論上回答這個問題,這將是[優選包括答案的主要部分(http://meta.stackoverflow.com/q/8259)這裏,並提供鏈路參考。 –