使用Python 2.7使用Beautiful Soup提取和打印表格标题和数据

使用Python 2.7使用Beautiful Soup提取和打印表格标题和数据,python,html,beautifulsoup,html-table,Python,Html,Beautifulsoup,Html Table,因此,我试图使用Beautifulsoup4.0从表中提取数据,但我不知道如何正确格式化 我编写了下面的代码,以从网站获取数据和信息,但我不知道如何格式化它,以便在打印它或将其保存为.txt/.csv文件时,它与网站上的表格具有相同的外观。我已经在这里和其他一些网站上寻找了答案,但我不知道如何继续下去。我是一个初学者,所以任何帮助都将不胜感激 我的代码只是打印一长串表行或表数据: import urllib2 import bs4 from bs4 import BeautifulSoup u

因此,我试图使用Beautifulsoup4.0从表中提取数据,但我不知道如何正确格式化

我编写了下面的代码,以从网站获取数据和信息,但我不知道如何格式化它,以便在打印它或将其保存为.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>

县
2005
该部分以页眉形式显示年份,直到2015年,然后州和县的数据进一步向下:

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

密歇根
127,518
其他县的情况也是如此。
再次感谢您的帮助。

您需要将表格存储在列表中

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”位置,然后去掉所有额外的\r\n和\xa0代码。这有意义吗?这样写的话:[郡,2005年,2006年…2015年]等等。是的,差不多就是这样。正如我所说,
表格内容
的结构和内容与网站上的表格相同,您可以随意处理。非常感谢。我将探讨这些选项。现在我有
table\u headers=table\u contents[0]
table\u body=table\u contents[1:99]
,它们似乎很好地将它分开了。我还注意到在输出的末尾,“Detroit City”和“Wayne ExcludingDetroit”已经与其表值一起出现在列表中。知道为什么会这样吗?因为某种原因我无法访问该网站。如果你发布你的输出,我可以看一看。最后的输出像这样
[u'、u'Detroit City'、u'13156'、u'13002'、u'12126'、u'11791'、u'11180'、u'10941'、u'10338'、u'10081'、u'10123'、u'9818'、u'9891'],[u'、u'Wayne(不包括石油),u'14216',u'14309',u'14230',u'13833',u'13467',u'13228',u'13388',u'13028',u'13489',u'13548',u'13581']