2017-04-06 4 views
1

したがって、BeautifulSoup 4.0を使用してMichigan Department of Health and Human Services websiteのテーブルからデータをスクラップしようとしていますが、正しくフォーマットする方法がわかりません。テーブルヘッダーとデータをPython 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

多次元配列(行→列)を作成するだけでOKです。 –

+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"の位置に割り当ててから、 nと\ xa0が出力されます。それは理にかなっていますか? こうすれば、[County、2005、2006 .... 2015]と続きます。 – meddhead

+0

はい、そうです。私が言ったように、 'table_contents'はウェブサイト上のテーブルと同じ構造と内容を持っていますが、あなたはそれを処理することができます。 –

+0

ありがとうございました。私はオプションを探るつもりです。今私は 'table_headers = table_contents [0]'と 'table_body = table_contents [1:99]'を分けているようです。私はまた、「デトロイト市」と「Wayne ExcludingDetroit」がすでに表の値でリストに入っていることを出力の最後に気付きました。それがどうして起こったのか? – meddhead

関連する問題