使用Python 2.7从美丽的汤中提取和打印表头和数据

时间:2017-04-06 00:06:22

标签: python html beautifulsoup html-table

所以我试图使用BeautifulSoup 4.0从Michigan Department of Health and Human Services website上的表中搜索数据,但我不知道如何正确格式化它。

我已经编写了以下代码来获取网站上的信息,但我不知道如何格式化它,以便它在打印或保存时与网站上的表格具有相同的外观它作为.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>

以及其他县的等等。 再次,非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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具有与页面上的表相同的结构和数据。