【问题标题】:How do I find all cells with a particular attribute in BeautifulSoup?如何在 BeautifulSoup 中找到具有特定属性的所有单元格?
【发布时间】:2010-09-17 22:58:30
【问题描述】:
我正在尝试开发一个脚本来从大量 html 表中提取一些数据。一个问题是包含用于创建列标题的信息的行数是不确定的。我发现标题行集的最后一行对于每个具有值的单元格都有属性border-bottom。因此我决定找到那些具有属性border-bottom的单元格。如您所见,我初始化了一个列表。我打算找到最终在borderCells 列表中的每个单元格的父级。但是,当我运行此代码时,只有一个单元格,即 allCells 中具有属性border-bottom 的第一个单元格被添加到列表borderCells 中。供您参考 allCells 有 193 个单元格,其中 9 个具有 attr 边界底部。因此,我期待borderCells 列表中有九个成员。任何帮助表示赞赏。
borderCells=[]
for each in allCells:
if each.find(attrs={"style": re.compile("border-bottom")}):
borderCells.append(each)
【问题讨论】:
标签:
python
parsing
beautifulsoup
【解决方案1】:
有什么原因吗
borderCells = soup.findAll("td", style=re.compile("border-bottom")})
不行吗?由于您对原始表格的描述非常模棱两可,而且还不清楚 allCells 应该是什么。
我建议提供您正在使用的 HTML 的代表性示例,以及从该表中提取的“正确”结果。
【解决方案2】:
你知道计算机永远是对的。答案是 attrs 在 html 中的不同事物上。我在一些看起来像这样的 html 上建模:
<TD nowrap align="left" valign="bottom">
<DIV style="border-bottom: 1px solid #000000; width: 1%; padding-bottom: 1px">
<B>Name</B>
</DIV>
</TD>
文件中 style="border-bottom etc 的其他地方如下所示:
<TD colspan="2" nowrap align="center" valign="bottom" style="border-bottom: 1px solid 00000">
<B>Location</B>
</TD>
所以现在我必须修改问题以弄清楚如何识别 attr 处于 td 级别而不是 div 级别的那些单元格
【解决方案3】:
有人拿走了他们的答案之一,尽管我对其进行了测试并且它对我有用。谢谢您的帮助。两个答案都有效,我学到了更多关于如何发布问题的知识,在我盯着代码一段时间后,我可能会更多地了解 Python 和 BeautifulSoup