2010-11-12 50 views
2

我试过这个: s = soup.findAll("table", {"class": "view"})但它给我的表。但我需要桌子内的桌子。如何使用美丽的汤解析桌子里面的桌子?

<table class="view" > 
    <tr> 
     <td width="46%" valign="top"> 
     <table> 
    <tr> 
     <td> 
      <div style="adasdasd"> 
       <div class="abc">dasdsadasdasdas</div> 
      </div> 
      <div> 
       <span><span class="aaaaaaa " title="aaaaaaaaaaa"><span>aaaaaaaaaaaaa</span></span> </span> 
       <b>My Face</b><br /> 
        Hello This is me, 
       </div> 
      <div class="abc""> 
        Dec 6, 2010 by Alis 
       </div> 
     </td> 
    </tr> 
     </table> 
    </tr> 
    </table> 

The things I want to scrap is: 

    Hello This is me, 

    My Face 

    Dec 6, 2010 by Alis 

回答

1
s = soup.findAll("table", {"class": "view"})[0].find("table") 

如果仅仅是一个表,你可以使用.find的第一个过了,放下[0]

+0

'ResultSet'对象没有属性'find'-属性错误我正在获取。 – user12345 2010-11-12 12:11:52

+0

如果你正在使用findAll,你也需要[0]。 findAll为你提供了一个ResultSet(就像一个列表),所以你需要指定你想使用找到的第一个。如果它只在页面上找到一个表,则可以使用find而不是findAll来获取它。 – 2010-11-12 12:32:06

1

下面有一些更好的HTML格式:

<table class="view" > 
    <tr> 
     <td width="46%" valign="top"> 
      <table> 
       <tr> 
        <td> 
         <div style="adasdasd"> 
          <div class="abc">dasdsadasdasdas</div> 
         </div> 
         <div> 
          <span> 
           <span class="aaaaaaa " title="aaaaaaaaaaa"> 
            <span>aaaaaaaaaaaaa</span> 
           </span> 
          </span> 
          <b>My Face</b> 
          <br /> 
          Hello This is me, 
         </div> 
         <div class="abc"> 
          Dec 6, 2010 by Alis 
         </div> 
        </td> 
       </tr> 
      </table> 
     </td> 
    </tr> 
</table> 

注:其实我加了标签,因为它缺少一个。

innerTable = soup.find("table", {"class": "view"}).tr.td.table ##Gets the table in the first cell of the first row 

innerDiv = innerTable.find("div", {"style": "adasdasd"}).nextSibling #this gets the div in which all of you content resides 

这样就可以让您知道所有内容。从那里只需要一点点解析即可获得实际需要的内容。