【问题标题】:Beautiful soup question美丽的汤问题
【发布时间】:2026-01-03 16:30:01
【问题描述】:

我想获取 HTML 文档中的特定行

行具有以下属性集:bgcolor 和 vallign

这是 HTML 表格的 sn-p:

<table>
   <tbody>
      <tr bgcolor="#f01234" valign="top">
        <!--- td's follow ... -->
      </tr>
      <tr bgcolor="#c01234" valign="top">
        <!--- td's follow ... -->
      </tr>
   </tbody>
</table>

我快速浏览了BS's documentation。不清楚要传递给 findAll 的参数以匹配我想要的行。

有谁知道 findAll() 用什么 tp bass 来匹配我想要的行?

【问题讨论】:

  • 根据其他人之前的挣扎修改了问题。现在使用 BeautifulSoup
  • 请让您的问题的标题更具体。

标签: python html-parsing beautifulsoup


【解决方案1】:

不要使用正则表达式来解析 html。使用 html 解析器

import lxml.html
doc = lxml.html.fromstring(your_html)
result = doc.xpath("//tr[(@bgcolor='#f01234' or @bgcolor='#c01234') "
    "and @valign='top']")
print result

这将从您的 html 中提取所有匹配的 tr 元素,您可以对它们进行进一步的操作,例如更改文本、属性值、提取、进一步搜索...

必填链接:

RegEx match open tags except XHTML self-contained tags

【讨论】:

  • 好的,既然您将问题从正则表达式更改为BeautifulSoup,我的回答就以lxml.html 为例。我觉得比BeautifulSoup好多了。
  • 糟糕。修改问题以改用 BeautifulSoup。我已经在我的一些脚本中使用了 BS,但从未听说过 lxml 模块。你知道传递给 BS 以获取行的内容吗(我有点犹豫要安装/学习另一个库)
  • @skyeagle: 好吧,我很久以前就放弃了BeautifulSoup lxml.html,因为它更快并且支持xpath!!!所以,这个答案最好留在这里作为提示。
  • 另外,BeautifulSoup 未维护
  • @Thomas K: lxml.htmlBeautifulSoup 更适合坏 html。您可以使用lxml.objectify 来使用相同风格的导航,但我不推荐它,因为仅使用 xpath 更简单。
【解决方案2】:

类似

soup.findAll('tr', attrs={'bgcolor': 重新编译(r'#f01234|#c01234'), 'valign': 'top'})

【讨论】: