我一直试图从使用大量表格的网站中删除数据。我一直在研究beautifulsoup文档以及stackoverflow,但我仍然迷失了。
这是上表:
<form action="/rr/" class="form">
<table border="0" width="100%" cellpadding="2" cellspacing="0" align="left">
<tr bgcolor="#6699CC">
<td valign="top"><font face="arial"><b>Uesless Data</b></font></td>
<td width="10%"><br /></td>
<td align="right"><font face="arial">Uesless Data</font></td>
</tr>
<tr bgcolor="#DCDCDC">
<td> <input size="12" name="s" value="data:" onfocus=
"this.value = '';" /> <input type="hidden" name="d" value="research" />
<input type="submit" value="Date" /></td>
<td width="10%"><br /></td>
</tr>
</table>
</form>
<table border="0" width="100%">
<tr>
<td></td>
</tr>
</table><br />
<br />
<table border="0" width="100%">
<tr>
<td valign="top" width="99%">
<table cellpadding="2" cellspacing="0" border="0" width="100%">
<tr bgcolor="#A0B8C8">
<td colspan="6"><b>Data to be pulled</b></td>
</tr>
<tr bgcolor="#DCDCDC">
<td><font face="arial"><b>Data to be pulled</b></font></td>
<td><font face="arial"><b>Data to be pulled</b></font></td>
<td align="center"><font face="arial"><b>Data to be pulled
</b></font></td>
<td align="center"><font face="arial"><b>Data to be pulled
</b></font></td>
<td align="center"><font face="arial"><b>Data to be pulled
</b></font></td>
<td align="center"><font face="arial"><b>Data to be pulled
</b></font></td>
</tr>
<tr>
<td>Data to be pulled</td>
<td align="center">Data to be pulled</td>
<td align="center">Data to be pulled</td>
<td align="center">Data to be pulled</td>
<td align="center"><br /></td>
</tr>
</table>
</td>
</tr>
</table>
&#13;
有很多桌子,其中没有一张真正有任何区别的标识或标签。我最近的尝试是:
table = soup.find('table', attrs={'border':'0', 'width': "100%'})
哪个只拉第一个空表。我觉得答案很简单,我在想它。
答案 0 :(得分:4)
如果您只是寻找所有表格,而不是第一张表格,那么您只需要find_all
而不是find
。
如果您正在尝试查找特定的表格,例如嵌套在另一个表格中的表格,并且页面使用的是90年代风格的设计,则无法通过id
或其他attrs找到它,唯一的选择是按结构搜索:
for table in soup.find_all('table'):
for subtable in table.find_all('table'):
# Found it!
当然,如果你真的想要,你可以将它变成一个单一的理解:
subtable = next(subtable for table in soup.find_all('table')
for subtable in table.find_all('table'))
请注意,我已离开attrs
。如果页面上的每个表都有相同attrs的超集,那么通过指定它们就无助于任何事情。
这一切显然都是丑陋而脆弱的......但是这种布局并没有让这些 变得脆弱。
使用不同的库,例如lxml.html
,可以让你通过XPath进行搜索可能会使它更紧凑,但它最终会做同样的事情。