我正在寻找使用 Python/BeautifulSoup 解析 HTML 表...
这是我第一次尝试用 Python 编写任何东西,所以它可能不是最有效的。
我在这里找到了另一个帖子的功能(在大多数情况下都很好用),但我遇到了几个问题。
我正在运行的代码在这里:
def strip_tags(html, invalid_tags):
bs2 = BeautifulSoup(str(html))
for tag in bs2.findAll(True):
if tag.name in invalid_tags:
s = ""
for c in tag.contents:
if not isinstance(c, NavigableString):
c = strip_tags(unicode(c), invalid_tags)
s += unicode(c)
tag.replaceWith(s)
return bs2
invalid_tags = ['td','b']
for row in bs.findAll('tr'):
col = row.findAll('td')
for index,item in enumerate(col):
t = item.findAll('a')
for ta in t:
ta.replaceWithChildren()
col[index] == item
for item in col:
print(strip_tags(item.string,invalid_tags).string
原始数据表 (HTML) 如下所示:
<td align="left">11/10</td>
<td>N ARMY</td>
<td>-7.5</td>
<td>NL</td>
<td><b>76-65</b></td>
<td><span style="color:green">W</span></td>
<td><span style="color:green">W</span></td>
<td></td>
<td class="cell4">50.0%</td>
<td class="cell4">76.9%</td>
<td class="cell4">37.5%</td>
<td class="cell5">37.1%</td>
<td class="cell5">90.0%</td>
<td class="cell5">29.4%</td>
当我运行 strip_tags 函数时,它适用于除第二行之外的所有标签...“无”作为输出返回。
如果有人能提供任何关于为什么会发生这种情况的见解,我将不胜感激。
编辑:哇感谢大家的快速回复。无论如何,这是我运行代码时发生的情况:
11/10 没有任何 -7.5 荷兰 76-65 W W 没有任何 50.0% 76.9% 37.5% 37.1% 90.0% 29.4%
问题在于第二行,它返回“None”而不是“N ARMY”。所以是的,理想情况下,我只想要在标签中找到的文本。