2010-05-10 65 views
3

我有這樣的HTML表:如何使用BeautifulSoup獲取這些值?

<table> 
    <tr> 
     <td class="datax">a</td> 
     <td class="datax">b</td> 
     <td class="datax">c</td> 
     <td class="datax">d</td> 
    </tr> 
    <tr> 
     <td class="datax">e</td> 
     <td class="datax">f</td> 
     <td class="datax">g</td> 
     <td class="datax">h</td> 
    </tr> 
</table> 

如何獲得第二和每個<tr>的第四值? 如果我這樣做:

bs.findAll('td', {'class':'datax'}) 

我得到:

 <td class="datax">a</td> 
     <td class="datax">b</td> 
     <td class="datax">c</td> 
     <td class="datax">d</td> 

     <td class="datax">e</td> 
     <td class="datax">f</td> 
     <td class="datax">g</td> 
     <td class="datax">h</td> 

它是正確的!但我想有這樣的結果:

 <td class="datax">b</td> 
     <td class="datax">d</td> 

     <td class="datax">f</td> 
     <td class="datax">h</td> 

所以,我想的值是 - >b - d - F - ħ

(第二和每個<tr>的第四<td>

BeautifulSoup模塊可以嗎?

非常感謝!

回答

-2

我知道使用HTQL,它很簡單:

<TR>。 <TD> 2,4

-

HTQL只有COM支持的思想。這是在JavaScript中一個完整的例子:

< HTML>
<體>
< SCRIPT LANGUAGE = JavaScript的>
        VAR一個=新的ActiveXObject( 「HtqlCom.HtqlControl」);
        a.setUrl(「C:\\ test_table.html」);
        a.setQuery(「< tr>。< td> 2,4」);
       爲(a.moveFirst();!a.isEOF(); a.moveNext()){
               文件撰寫(一個。getValueByIndex(1));
       }
</SCRIPT>
</BODY>
</HTML>

+0

什麼?你能給我一個完整的例子嗎? 非常感謝你! – Damiano 2010-05-10 14:07:55

+0

-1:HTQL不太適合Python ... – 2010-05-10 14:27:05

5

這應做到〜

final_values=[td.string for td in bs.findAll('td', {'class':'datax'})[1::2]] 

(後評論澄清)爲您的具體情況它會是:

final_values=[td.b.a.string for td in bs.findAll('td', {'class':'datax'})[1::2]] 
+0

我認爲有錯誤。我得到[None,None,None .....] – Damiano 2010-05-10 14:22:15

+0

>>> [td.string for td在soup.findAll('td',{'class':'datax'})[1 :: 2]] [u'b',u'd',u'f',u'h'] 除非bs不是BeautifulSoup(來源)這應該工作正常 – dagoof 2010-05-10 14:31:11

+0

嗯我檢查... td.string是None beacuse td的值是 - >AAU(我必須得到AAU) – Damiano 2010-05-10 14:41:18