簡體   English   中英

BeautifulSoup刮平嵌套表

[英]BeautifulSoup scraping nested tables

我一直試圖從使用大量表格的網站中刪除數據。 我一直在研究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> 

有很多表,沒有一個表真的有任何區別ID或標簽。 我最近的嘗試是:

table = soup.find('table', attrs={'border':'0', 'width': "100%'})

哪個只拉第一個空表。 我覺得答案很簡單,我在思考它。

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

如果您正在嘗試查找特定的表,例如嵌套在另一個表中的那個表,並且該頁面使用90s風格的設計,這使得無法通過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進行搜索可能會讓它更緊湊,但它最終會做同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM