BeautifulSoup刮取嵌套表

kay*_*duh 5 python beautifulsoup html-parsing

我一直在尝试从使用大量表格的网站上抓取数据。我一直在研究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>
Run Code Online (Sandbox Code Playgroud)

有很多表,但实际上没有一个表具有任何区别的ID或标签。我最近的尝试是:

table = soup.find('table', attrs={'border':'0', 'width': "100%'})
Run Code Online (Sandbox Code Playgroud)

这只拉第一个空表。我觉得答案很简单,我想得太多了。

aba*_*ert 5

如果您只是查找所有表,而不是第一个表,那么您只需要find_all而不是find.

\n\n

如果您试图查找某个特定的表,例如嵌套在另一个表中的表,并且该页面使用 90 年代风格的设计,因此无法通过id或其他属性找到它,唯一的选择是按结构搜索:

\n\n
for table in soup.find_all('table'):\n    for subtable in table.find_all('table'):\n        # Found it!\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,如果你真的想的话,你可以将其扁平化为一个单一的理解:

\n\n
subtable = next(subtable for table in soup.find_all('table') \n                for subtable in table.find_all('table'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,我省略了attrs. 如果页面上的每个表都有相同属性的超集,那么指定它们不会有任何帮助。

\n\n

这整件事显然是丑陋和脆弱\xe2\x80\xa6 但真的没有办法这种布局

\n\n

使用不同的库(例如lxml.html,允许您通过 XPath 进行搜索)可能会使其更加紧凑,但最终会做同样的事情。

\n