You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用BeautifulSoup同时提取无class和指定class的td元素?

解决方法

要同时提取无class属性的<td>和class为sem_dados的<td>并保留原顺序,有两种靠谱的写法:

方法1:用lambda过滤器

直接给class_参数传一个lambda表达式,判断元素的class属性要么是None(无class),要么等于sem_dados:

object.find_all("td", class_=lambda x: x is None or x == "sem_dados")

方法2:用CSS选择器

通过CSS选择器组合两种规则,td:not([class])匹配无class的td,td.sem_dados匹配指定class的td:

object.select("td:not([class]), td.sem_dados")

为什么原来的写法不行?

BeautifulSoup的class_参数传入列表时,是匹配class属性值包含列表中任意项的元素,但列表里的None会被当成要匹配“class属性值为None”的元素(实际网页里几乎没有这种情况),而不是匹配“没有class属性”的元素,所以之前的写法拿不到无class的td。

内容的提问来源于stack exchange,提问作者Joao Francisco Pugliese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:44:55