如何使用BeautifulSoup获取这些值?

3 投票
2 回答
4370 浏览
提问于 2025-04-15 22:33

我有一个这样的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>

所以,我想要的值是 -> b - d - f - h

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

用BeautifulSoup模块可以做到吗?

非常感谢!

2 个回答

-2

我知道用HTQL很简单:

<tr>.<td>2,4

--

不过,HTQL只支持COM。下面是一个完整的JavaScript示例:

<html>
<body>
<script language=JavaScript>
     var a= new ActiveXObject("HtqlCom.HtqlControl");
     a.setUrl("C:\\test_table.html");
     a.setQuery("<tr>.<td>2,4");
     for (a.moveFirst(); !a.isEOF(); a.moveNext()){
         document.write(a.getValueByIndex(1));
     }
</script>
</body>
</html>

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

撰写回答