gpt4 book ai didi

python - BeautifulSoup 标签去除

转载 作者:太空宇宙 更新时间:2023-11-03 19:01:32 25 4
gpt4 key购买 nike

我正在寻找使用 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 函数时,它适用于除第二行之外的所有标签...“None”作为输出返回。

如果有人能够提供任何关于为什么会发生这种情况的见解,我将不胜感激。

编辑:哇感谢大家的快速回复。无论如何,这是我运行代码时发生的情况:

11/10None-7.5NL76-65WWNone50.0%76.9%37.5%37.1%90.0%29.4%

问题出在第二行,它返回“None”而不是“N ARMY”。所以是的,理想情况下我只想要标签中找到的文本。

最佳答案

如果我正确理解了您想要的输出,您不需要手动删除标签 - 这就是我们使用 BeautifulSoup 的原因! ;)

您需要调用 find_all() 返回的 tag 实例上的 get_text() 方法。

使用示例 html:

<table>
<tr>
<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>
</tr>
</table>

td 进行简单迭代,并调用 get_text(),我们就可以开始了!

from bs4 import BeautifulSoup

with open('test.html', 'rb') as html: #My local version of your html file
soup = BeautifulSoup(html.read())

for td in soup.find_all('td'):
print td.get_text()

这给出了输出:

11/10
N ARMY
-7.5
NL
76-65
W
W

50.0%
76.9%
37.5%
37.1%
90.0%
29.4%
[Finished in 0.1s]

关于python - BeautifulSoup 标签去除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15934562/

25 4 0