2017-04-06 28 views
1

所以我試圖用BeautifulSoup 4.0從Michigan Department of Health and Human Services website的表上刮取數據,我不知道如何正確格式化。使用Python 2.7提取並打印表格頭和數據用美麗的湯2.7

我有下面的代碼來獲取和從網站的信息,但我很茫然,因爲如何格式化它,使其具有與網站上的表格相同的外觀時,我打印或保存它作爲.txt/.csv文件。我在這裏和其他一些網站上尋找答案,但我不知道如何繼續這個。我非常初學者,所以任何幫助將不勝感激。

我的代碼只是打印無論是錶行或表數據的一個長長的清單:

import urllib2 
import bs4 
from bs4 import BeautifulSoup 

url = "https://www.mdch.state.mi.us/osr/natality/BirthsTrends.asp" 
page = urllib2.urlopen(url) 
soup = BeautifulSoup((page), "html.parser") 

table = soup.find("table") 
rows = table.find_all("tr") 

for tr in rows: 
    tds = tr.find_all('td') 
    print tds 

,我正在看的HTML低於還有:

<table border=0 cellpadding=3 cellspacing=0 width=640 align="center"> 
    <thead style="display: table-header-group;"> 
    <tr height=18 align="center"> 
    <th height=35 align="left" colspan="2">County</th> 

    <th height="35" align="right"> 
    2005 
    </th> 

那部分節目年份作爲標題,直到2015年,然後州和縣的數據進一步下降:

<tr height="40" > 
     <th class="LeftAligned" colspan="2">Michigan</th> 
<td> 
127,518 
</td> 

和其他縣也是如此。 再次,任何幫助非常感謝。

+0

所有你需要做的是製作一個多維數組(行 - >列),你沒問題。 –

+0

請原諒我在這裏的無知,但我會如何去做,只要代碼去? – meddhead

回答

0

您需要將表存儲在一個列表

import urllib2 
import bs4 
from bs4 import BeautifulSoup 

url = "https://www.mdch.state.mi.us/osr/natality/BirthsTrends.asp" 
page = urllib2.urlopen(url) 
soup = BeautifulSoup((page), "html.parser") 

table = soup.find("table") 
rows = table.find_all("tr") 

table_contents = [] # store your table here 
for tr in rows: 
    if rows.index(tr) == 0 : 
     row_cells = [ th.getText().strip() for th in tr.find_all('th') if th.getText().strip() != '' ] 
    else : 
     row_cells = ([ tr.find('th').getText() ] if tr.find('th') else []) + [ td.getText().strip() for td in tr.find_all('td') if td.getText().strip() != '' ] 
    if len(row_cells) > 1 : 
     table_contents += [ row_cells ] 

現在table_contents具有相同的結構和數據作爲頁的表格。

+0

好的。我明白這是如何工作的。因此,現在我有一堆嵌套列表,我可以將狀態和縣名分割成第一個列表,並將它們分配到組中的各個列表的「0」位置,然後將所有額外的\ r \ n和\ xa0代碼輸出。那有意義嗎? 這樣就會顯示:[County,2005,2006 .... 2015]等等。 – meddhead

+0

是的,這就是它。正如我所說,'table_contents'與網站上的表具有相同的結構和內容,您可以根據需要進行處理。 –

+0

非常感謝。我將探索選項。現在我有'table_headers = table_contents [0]'和'table_body = table_contents [1:99]'這似乎很好地分開它。我還注意到輸出結尾的「底特律市」和「Wayne Excluding Detroit」已經在列表中。任何想法爲什麼會發生? – meddhead