美好的一天,
我正在尝试使用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> 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')
最佳答案
您需要安装lxml
和let 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