有没有办法使用BeautifulSoup从HTML文件中提取所有类名?

时间:2017-04-25 02:57:31

标签: python beautifulsoup

<tr id="section_1asd8aa" class="main">
<td class="header">
  <table cellspacing="0" cellpadding="0">
      <tbody>
        <tr>
            <td style="font-family: arial,sans-serif; font-size: 11px;>DUMMY TEXT<a href="#">browser.</a>
            </td>
          </tr>
      </tbody>
    </table>
</td></tr>

上面是一个示例html,我想从html文件中提取所有类名。 输出:'{“c1”:“main”,“c2”:“header”}'

1 个答案:

答案 0 :(得分:2)

您可以使用find_all获取一组节点,然后遍历节点集并检查节点是否具有class属性,如果有,则返回该类:

from bs4 import BeautifulSoup
soup = BeautifulSoup("""<tr id="section_1asd8aa" class="main">
<td class="header">
  <table cellspacing="0" cellpadding="0">
      <tbody>
        <tr>
            <td style="font-family: arial,sans-serif; font-size: 11px;>DUMMY TEXT<a href="#">browser.</a>
            </td>
          </tr>
      </tbody>
    </table>
</td></tr>""", "html.parser")

获取类名列表:

lst = [node['class'] for node in soup.find_all() if node.has_attr('class')]
lst
# [['main'], ['header']]

将列表转换为字典:

{"c"+str(i): v  for i, v in enumerate(lst)}
# {'c0': ['main'], 'c1': ['header']}

请注意,类包含在列表中,因为某些类可以有多个值。如果需要,您可以将列表作为单个字符串加入。

{"c"+str(i): " ".join(v)  for i, v in enumerate(lst)}
# {'c0': 'main', 'c1': 'header'}