BeautifulSoup正在关闭第一个单元格后的表格

时间:2014-05-28 02:49:12

标签: python beautifulsoup

美好的一天,

我正在尝试使用Python 2.7 / BeautifulSoup4来解析一堆页面。其中一页是这一页:http://www.eliteprospects.com/player.php?player=3664

我的问题是我正在尝试从主表中获取数据,但汤在第一个单元格后关闭表。

所以我的代码是这样的:

soup = BeautifulSoup(requests.get(url).text, "html.parser")
t = soup.findAll('table', 'tableborder')

t的长度为3,如果我使用html5lib或者不定义解析器,则t为零。我无法在我的计算机上安装lxml来试试。

因此源代码中的主表t [0]如下所示:

<table cellpadding="0" cellspacing=0 width=100% class="tableborder" >
   <tr class="trbackground" height="20">
   <td align="left"><font color="white"><strong>&nbsp;Season</strong></font></a></td>
   <td align="left"><font color="white"><strong>Team</strong></font></td>
   <td align="left"><font color="white"><strong>League</strong></font></td>
   <td align="right"><font color="white"><strong>GP</strong></font></td>
   <td align="right"><font color="white"><strong>G</strong></font></td>
...

t [1]和t [2]是不同的表格,能够拉出整个表格。但是t [0]看起来像这样:

<table cellpadding="0" cellspacing="0" class="tableborder" width="100%">
<tr class="trbackground" height="20">
<td align="left"><font color="white"><strong> Season</strong></font></td></tr></table>

似乎是在第一个单元格之后结束了表格。我不确定为什么要这样做或如何阻止它。几个月前,这个相同的脚本在同一页面上工作。他们可能已经更新了他们的源代码,但我不确定导致错误的原因。

另外,尝试使用不同方法识别该表会产生类似的结果,例如:

t = soup.findAll('table', width='100%', cellspacing='0', cellpadding='0')

1 个答案:

答案 0 :(得分:1)

您需要安装lxmllet BeautifulSoup use it

>>> soup = BeautifulSoup(requests.get(url).text, "lxml")
>>> t = soup.findAll('table', 'tableborder')
>>> len(t)
4
>>> len(t[0].find_all('td'))
527

并且,为了显示差异,html.parser发生了什么:

>>> soup = BeautifulSoup(requests.get(url).text, "html.parser")
>>> t = soup.findAll('table', 'tableborder')
>>> len(t)
4
>>> len(t[0].find_all('td'))
1