2

代码

#!/usr/bin/env python3
from bs4 import BeautifulSoup

test="""<!DOCTYPE html>
<html>
<head>
 <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
 <title>Test</title>
</head>
<body>
<table>
<tbody>
<tr>
 <td>
  <div>
   <b>
    Icon
   </b>
  </div>
 </td>
</tr>
</tbody>
</table>
</body>
</html>"""

soup = BeautifulSoup(test2)
rows = soup.findAll('tr')
for r in rows:
    print(r.name)
    for c in r.children:
        print('>', c.name)

输出

tr
> None
> td
> None

为什么行的子项列表中有无名元素?

在 Windows 8 上运行 Python 3.3.1 64 位时会发生这种情况html.parser(这是 Python 的内置版本)。

4

1 回答 1

2

的元素.children可以是NavigableStrings以及Tagstd在您的示例中,它们是元素前后的空格。

希望您的代码的这种变化可以清楚地说明:

>>> rows = soup.findAll('tr')
>>> for r in rows:
...     print("row:", r.name)
...     for c in r.children:
...         print("---")
...         print(type(c))
...         print(repr(c))
... 
row: tr
---
<class 'bs4.element.NavigableString'>
'\n'
---
<class 'bs4.element.Tag'>
<td>
<div>
<b>
    Icon
   </b>
</div>
</td>
---
<class 'bs4.element.NavigableString'>
'\n'
于 2013-08-17T03:11:12.323 回答