如何使用BeautifulSoup获取这些值?

时间:2010-05-10 13:58:31

标签: python beautifulsoup

我有这个html表:

<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>

所以,我想要的值是 - &gt; b - d - f - h

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

是否可以使用BeautifulSoup模块?

非常感谢!

2 个答案:

答案 0 :(得分: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]]

答案 1 :(得分:-2)

我知道使用HTQL,很简单:

&LT; TR&GT;。&LT; TD&GT; 2,4

-

HTQL只有COM支持的想法。以下是javascript中的完整示例:

&LT; HTML&GT;
&LT;身体GT;
&lt; script language = JavaScript&gt;
var a = new ActiveXObject(“HtqlCom.HtqlControl”);
a.setUrl( “C:\\ test_table.html”);
a.setQuery( “&LT; TR&GT;。&LT; TD&GT; 2,4”);
for(a.moveFirst();! a.isEOF(); a.moveNext()){
文件撰写(a.getValueByIndex(1));
} &LT; /脚本&GT;
&LT; /体&GT;
&LT; / HTML&GT;